如果 4 个条件中有 2 个为真,则使用 R 创建新变量 [重复]
Posted
技术标签:
【中文标题】如果 4 个条件中有 2 个为真,则使用 R 创建新变量 [重复]【英文标题】:Create new variable if 2 of the 4 conditions are true using R [duplicate] 【发布时间】:2016-11-03 01:43:24 【问题描述】:如果4个条件中的任何2个为真,有什么方法可以创建一个新变量var5 = 1
输入:
id var1 var2 var3 var4
1 60 18 36.7 1000
2 30 23 45.6 4000
3 10 35 75.6 5000
4 50 35 53 3000
condition1: if var1<20 or var1>25
condition2: if var2>25
condition3: if var3>20
condition4: if var4<1000 or var4>3000
【问题讨论】:
@Li, var5=1 如果 4 个条件中有 2 个为真。 是的,您可以将if
与sum
一起使用。只要至少 2 个元素为 TRUE,那么您就很好。
【参考方案1】:
这是一个使用dplyr
的解决方案,它使编写这段代码更简洁:
library(dplyr)
dat %>% rowwise %>%
mutate(var5 = ifelse(sum(c(var1 < 20 | var1 > 25,
var2 > 25,
var3 > 20,
var4 < 1000 | var4 > 3000 )) >= 2,
1, 0))
#Source: local data frame [4 x 6]
#Groups: <by row>
#
# id var1 var2 var3 var4 var5
# (int) (int) (int) (dbl) (int) (dbl)
#1 1 60 18 36.7 1000 1
#2 2 30 23 45.6 4000 1
#3 3 10 35 75.6 5000 1
#4 4 50 35 53.0 3000 1
如果您想要恰好 2 个条件而不是像我想的那样至少 2 个条件,您应该将 >=
更改为 ==
。
【讨论】:
感谢 Molx 的帮助 如果 var1-var4 中的变量之一包含 NA 值,则代码不起作用。任何使用 NA 值的解决方案?谢谢【参考方案2】:如果你的数据框是df
:
condition1 <- df$var1 < 20 | df$var1 > 25
condition2 <- df$var2 > 25
condition3 <- df$var3 > 20
condition4 <- df$var4 < 1000 | df$var4 > 3000
lgc <- condition1 + condition2 + condition2 + condition4
df$var5 <- ifelse(lgc %in% c(2,4), 1, 0)
【讨论】:
条件 1 和 4 应该使用 OR 而不是 AND,否则它们甚至没有意义。 是的,你是对的,我看错了。以上是关于如果 4 个条件中有 2 个为真,则使用 R 创建新变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章