繁体   English   中英

R中基于多个条件创建列

[英]Creating a column based on multiple conditions in R

我正在尝试根据 R 中的多个条件创建一个额外的列。

我当前的数据框是这样的:

df = data.frame(
var1 = c(0, 4, 8, 2, 4, 10, 2, 3, 2, 9),
var2 = c(9, 10, 5, 4, 7, 8, 6, 9, 7, 2),
var3 = c(3, 3, 5, 5, 4, 5, 5, 2, 2, 1))
df

我希望新列是二进制“是”或“否”,如果案例的 var1 和 var2 或 var3 的平均值均高于平均值,则为“是”

到目前为止我已经尝试过:

mean(df$var1, na.rm = TRUE)
mean(df$var2, na.rm = TRUE)
mean(df$var3, na.rm = TRUE)

这些分别给出 4.4、6.7 和 3.5。

然后创建新列,我尝试:

library(dplyr)
df %>%
dplyr::mutate(
newvar = ifelse(
var1 > 4.4 &
(var2 > 6.7 |
var3 > 3.5),
"Yes",
"No")

我不确定如何正确执行 state - 我意识到我上面的内容不正确(给出错误“缺少参数“是”,没有默认值”),但我不确定如何解决这个问题并且会非常感谢任何建议。

谢谢。

您非常接近 - 您只需将ifelse()的条件括在括号中。

df  |>
    mutate(
        newvar  = ifelse(
            (
                var1 > mean(var1) & 
                (var2 > mean(var2) | var3 > mean(var3))
            ),
            "Yes", 
            "No"
        )
    )
#    var1 var2 var3 newvar
# 1     0    9    3     No
# 2     4   10    3     No
# 3     8    5    5    Yes
# 4     2    4    5     No
# 5     4    7    4     No
# 6    10    8    5    Yes
# 7     2    6    5     No
# 8     3    9    2     No
# 9     2    7    2     No
# 10    9    2    1     No

我们可以使用if_all/if_any

library(dplyr)
df <- df %>% 
   mutate(newvar = case_when(if_any(var2:var3, ~
     .x > mean(.x))& var1 > mean(var1) ~ "Yes", TRUE ~ "No"))

-输出

df
 var1 var2 var3 newvar
1     0    9    3     No
2     4   10    3     No
3     8    5    5    Yes
4     2    4    5     No
5     4    7    4     No
6    10    8    5    Yes
7     2    6    5     No
8     3    9    2     No
9     2    7    2     No
10    9    2    1     No

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM