Для следующего набора данных

> data
   x1 x2 x3
1   1  0  0
2   0  1  0
3   0  0  1
4   0  0  1
5   1  0  0
6   0  1  0
7   1  0  0
8   0  1  0
9   0  0  1
10  1  0  0

Я хотел бы создать новую переменную z, чтобы она принимала 1, если x1=1, 2, если x2=1 и 3, если {{X6} }, z будет выглядеть как z=c(1,2,3,3,1,2,1,2,3,1). Любая помощь приветствуется

0
Uddin 18 Ноя 2019 в 06:49

1 ответ

Лучший ответ

Предполагая, что в данной строке будет только одна 1, как показано в общих данных, мы можем использовать max.col

data$z <- max.col(data)
data
#   x1 x2 x3 z
#1   1  0  0 1
#2   0  1  0 2
#3   0  0  1 3
#4   0  0  1 3
#5   1  0  0 1
#6   0  1  0 2
#7   1  0  0 1
#8   0  1  0 2
#9   0  0  1 3
#10  1  0  0 1

В случае нескольких единиц в данной строке исследуйте ties.method в ?max.col, который дает возможность получить "первую" или "последнюю" 1.

Если мы хотим вернуть 0, если все значения строк равны 0, мы можем сделать:

data$z <- max.col(data) * +(rowSums(data == 1) > 0)
3
Ronak Shah 31 Май 2020 в 23:42