Как выделить определенное значение в разных строках и перенести его в новый столбец? - PullRequest
0 голосов
/ 23 января 2020

У меня есть такой фрейм данных:

> dput(df)
structure(list(vehicle1 = c("No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No"), vehicle2 = c("No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No"), vehicle3 = c("No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No"), vehicle4 = c("No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No"), vehicle5 = c("No", "Yes", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No"), vehicle6 = c("No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", 
"No", "No")), row.names = c(NA, -25L), .Label = c("Yes", "No"
), class = c("tbl_df", "tbl", "data.frame"))

Я хочу создать новый столбец и заполнить его "Да" и "Нет" на основе условия.

Условие is: Если в строке есть «Да», заполните ячейку нового столбца «Да». Если в строке нет «Да», заполните ячейку нового столбца «Нет».

Не имеет значения, если в строке более одного «Да».

Есть ли у кого-нибудь ответ на мою проблему?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Несколько способов сделать это. Один подход с использованием rowSums

df$New_col <- c("No", "Yes")[(rowSums(df == "Yes") > 0) + 1]

Однако в этом случае, поскольку у нас есть только значения "Yes" и "No" в кадре данных, и поскольку "Yes" больше, чем "No" ("Yes" > "No") краткий и эффективный подход - использовать pmax.

df$New_col <- do.call(pmax, df)

Если вы используете NA:

df$New_col <- do.call(pmax, c(df, na.rm  =TRUE))
1 голос
/ 23 января 2020

Базовое решение R использует ifelse() + rowSums(), то есть

ifelse(rowSums(df == "Yes")>0,"Yes","No")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...