【问题标题】:Create new variable if 2 of the 4 conditions are true using R [duplicate]如果 4 个条件中有 2 个为真,则使用 R 创建新变量 [重复]
【发布时间】: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,那么您就很好。

标签: r if-statement conditional


【解决方案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,否则它们甚至没有意义。
  • 是的,你是对的,我看错了。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2017-01-07
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2023-03-15
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多