Как использовать mutate для нового столбца на основе данных в нескольких существующих столбцах - PullRequest
0 голосов
/ 27 февраля 2020

Доброе утро,

это мой набор данных, содержащий данные о расах разных клиентов.

White  Asian  Black  Native  Islander  Other
1       0       0      0       0         0
0       1       0      0       0         0
0       0       0      1       0         0
0       0       1      0       0         0
1       0       0      0       1         0
0       0       0      0       0         1

Данные хранятся с логическим значением, где 0 = Нет и 1 = Да

Так, если у клиента есть 1 для столбца белого цвета, то они белого цвета.

Но если у клиента есть 1 для белых и островитян, то они многорасовые.

Так что это будет мой желаемый вывод

White  Asian  Black  Native  Islander  Other   Race
1       0       0      0       0         0     White
0       1       0      0       0         0     Asian
0       0       0      1       0         0     Native
0       0       1      0       0         0     Black
1       0       0      0       1         0     Multi-Racial 
0       0       0      0       0         1     Other

Я знаком с mutate (), но я использовал только mutate на основе одного столбца.

Может ли кто-нибудь предоставить код, который может помочь с моим желаемым выводом?

1 Ответ

2 голосов
/ 27 февраля 2020

Использование ifelse() с max.col() должно дать вам то, что вы хотите. Для строк, которые имеют только одно значение, вы индексируете имя, в котором оно было, в противном случае оно равно "Multi-Racial"

df1$Race <- ifelse(rowSums(df1) == 1, names(df1)[max.col(df1)], "Multi-Racial")
df1
  White Asian Black Native Islander Other         Race
1     1     0     0      0        0     0        White
2     0     1     0      0        0     0        Asian
3     0     0     0      1        0     0       Native
4     0     0     1      0        0     0        Black
5     1     0     0      0        1     0 Multi-Racial
6     0     0     0      0        0     1        Other

или с использованием mutate():

df1 %>%
  mutate(Race = ifelse(rowSums(.) == 1, names(.)[max.col(.)], "Multi-Racial"))

Данные :

df1 <- read.table(header = T, text = "White  Asian  Black  Native  Islander  Other
1       0       0      0       0         0
0       1       0      0       0         0
0       0       0      1       0         0
0       0       1      0       0         0
1       0       0      0       1         0
0       0       0      0       0         1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...