我有一个与下面类似的数据框,只不过我有 17 个变量(如 Var1
和 Var2
)而不是 2 个。
df <- read.table(header = TRUE, text =
"STUD_ID Var1 Var2
1 0 0
1 0 1
2 1 2
3 3 0", stringsAsFactors = FALSE)
我想创建一个新列,如果 17 个变量中任何一个的值为 1、2 或 3,则输出"is",否则输出“否”。我想要的输出是:
# STUD_ID Var1 Var2 Output
# 1 0 0 "No"
# 1 0 1 "Yes"
# 2 1 2 "Yes"
# 3 3 0 "Yes"
我尝试了以下代码,但它给出了错误,我不想复制粘贴部分代码 17 次:
df %>%
mutate(output = if_else(var1 %in% 1:3 |
var2 %in% 1:3, 1, 0))
最佳答案
我们可以使用基础R
df$Output <- c("No", "Yes")[Reduce(`|`, lapply(df[-1], `%in%`, 1:3)) + 1]
df$Output
#[1] "No" "Yes" "Yes" "Yes"
<小时/>
或者使用tidyverse
library(tidyverse)
df %>%
mutate_at(vars(matches("Var")), funs(. %in% 1:3)) %>%
select(-STUD_ID) %>%
reduce( `|`) %>% {c('No', 'Yes')[. + 1]} %>%
mutate(df, output = .)
# STUD_ID Var1 Var2 output
#1 1 0 0 No
#2 1 0 1 Yes
#3 2 1 2 Yes
#4 3 3 0 Yes
关于r - 对许多列应用相同的标准来计算新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433740/