r - 使用 case_when 返回相互包含的条件列表
问题描述
我想在数据框上创建一个列表列,它可以使用多列匹配多个条件。我尝试使用case_when
,但它不会自行工作,因为它会在满足第一个条件时停止。
一个愚蠢但简单的例子:case2
应该总是有满足case1
。理想情况下,我想要一个返回类似c("case1", "case2")
(preferred) 或list("case1", "case2")
. 但是,我有多个条件,因此我想返回满足的每个条件,而无需在案例表达式的右侧明确设置每个相互包含的案例。
mtcars %>%
mutate(x = case_when(mpg >= 15 & cyl == 6 ~ "case1",
mpg >= 10 ~ "case2",
cyl >= 7 ~ "case3",
mpg >= 10 ~ "case4",
mpg >= 10 & cyl >= 5 ~ "case5"))
这可以实现吗?
解决方案
为每个条件换list
行以返回一个list
library(dplyr)
out <- mtcars %>%
mutate(x = case_when(mpg >= 15 & cyl == 6 ~ list("case1"),
mpg >= 10 ~ list(c("case1", "case2")),
cyl >= 7 ~ list("case3")))
-输出
> head(out)
mpg cyl disp hp drat wt qsec vs am gear carb x
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 case1
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 case1
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 case1, case2
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 case1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 case1, case2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 case1
推荐阅读
- html - 如何将 .env 文件中的变量导入 index.html html 页面
- r - R-base 无法升级到 4.0:显示“r-base 已经是最新版本 (3.4.4-1xenial0)”
- macos - 使用 Applescript 将下载内容复制到新创建的文件夹
- oracle - 需要 PIVOT 帮助
- python - 转发过程中的“RuntimeError:预期的标量类型 Long 但发现 Float”
- javascript - 发送的 axios post api 数据在服务器端的 console.log(req.body) 上给出了空对象
- python - 在 Python 中调用函数(不显示图表)
- angular - 如何在 Angular 中创建基本单元测试
- javascript - 使用功能组件从父级清除 React 子级输入值
- javascript - json对象上的多属性检查三元运算符在nodejs中不起作用,而它在google chrome控制台中工作