[英]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.