gpt4 book ai didi

r - 对许多列应用相同的标准来计算新列

转载 作者:行者123 更新时间:2023-12-03 03:33:46 24 4
gpt4 key购买 nike

我有一个与下面类似的数据框,只不过我有 17 个变量(如 Var1Var2 )而不是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com