Присвоение категогических значений нескольким переменным в r
Скажем, у меня есть следующий ввод данных в R
x <- c(1,1,0,0,0,0)
y <- c(1,0,1,0,0,0)
z <- c(0,0,0,0,1,1)
p <- c(0,0,0,1,1,0)
data <- data.frame(x,y,z,p)
Теперь я хочу ввести новую переменную в данных под названием "кошка"
в рамках cat я хочу присвоить значения "a" любому наблюдению, где 1 появляется в виде x или y o появляется в обоих. Я хочу назначить значение 'b' для наблюдений, где 1 появляется в одном или обоих z и p.
2 ответа
c("b", "a")[(!!rowSums(data[,1:2])) +0 + (!!rowSums(data[,3:4])+1)]
#[1] "a" "a" "a" "b" "b" "b"
- Предполагая, что я понимаю условие, а также предполагая, что не будет никаких пересекающихся случаев, то есть строк одного или обоих
x
,y
которые1
не имеет пересечения сz
или жеp
имеющий1
ценности В качестве первого шага я сделал
rowSums
на колоннахx
а такжеy
rowSums(data[,1:2]) #[1] 2 1 1 0 0 0
Двойное отрицание на приведенный выше результат и добавление
0
дает(!!rowSums(data[,1:2]))+0 #[1] 1 1 1 0 0 0
То же самое применительно к столбцам
z
а такжеp
но я добавляю1
дает(!!rowSums(data[,3:4]))+1 #[1] 1 1 1 2 2 2
Если добавить два приведенных выше результата, получим
(!!rowSums(data[,1:2])) +0 + (!!rowSums(data[,3:4])+1) #[1] 2 2 2 1 1 1
Это может быть использовано в качестве числового индекса, так что если я использую
c("b", "a")[!!rowSums..]
,2
значения будут замененыb
а также1
сa
,
Эта строка возвращает "а", если либо x
или же y
не равен нулю, а "b" в противном случае.
ifelse(data$x | data$y, "a", "b")
# [1] "a" "a" "a" "b" "b" "b"
Если вам нужно обработать случай, когда все четыре столбца равны нулю, вы можете использовать:
ifelse(data$x | data$y,
"a",
ifelse(data$z | data$p, "b", "neither a nor b"))