如果 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 个为真。 是的,您可以将ifsum 一起使用。只要至少 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 个条件,您应该将 &gt;= 更改为 ==

【讨论】:

感谢 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 创建新变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果 3 个参数中只有 1 个为真,则返回真 [关闭]

haskell - 指定 # 个条件为真

linux条件判断之判断文件是否存在

JavaScript新手学习笔记4——我记不住的几个坑:短路逻辑按值传递声明提前

T-SQL 在一组条件中恰好有一个条件为真

如果条件为真,则选择数据