Как заменить значения в кадре данных между значениями x и y - PullRequest
1 голос
/ 22 января 2020

Предположим, фрейм данных

df <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))

Я хочу превратить все ячейки от 2 до 6 в 1, а все ячейки ниже 2 или выше 6 в 0.

Следующее не работает :

df[df < 2] <- "0"
df[df > 6] <- "0"
df[df > 2] <- "1"
df[df < 6] <- "1"

Поскольку последний шаг превращает все значения ниже 6 в 1 с (не останавливается на 2).

Любая помощь очень ценится

Ответы [ 3 ]

3 голосов
/ 22 января 2020

Преобразовать в логическую матрицу, а затем привести к двоичному с помощью + и присвоить его обратно в набор данных te

df[] <- +(df > 2 & df < 6)
1 голос
/ 22 января 2020

Если все данные одного и того же класса (т. Е. Целые числа), рассмотрите возможность использования матрицы вместо фрейма данных.

m <- as.matrix(df)
i <- m %in% 3:5
m[i] <- 1
m[!i] <- 0
1 голос
/ 22 января 2020

Используйте ifelse(), т.е. df <- as.data.frame(ifelse(df >= 2 & df <= 6,1, 0)). Можно также использовать вложенный ifelse, если у вас были дополнительные проверки. В противном случае можно определить функцию и sapply() для столбцов или mapply для data.frame (вероятно, придется аналогичным образом изменить матрицу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...