Для следующего набора данных
> 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)
. Любая помощь приветствуется
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)
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.