r - 如何在 case_when 中传递列名向量
问题描述
我正在使用incase_when
来总结数据框。我有一个示例数据框,如下所示rowwise
dplyr
structure(list(A = c(NA, 1, 0, 0, 0, 0, 0), B = c(NA, 0, 0, 1,
0, 0, 0), C = c(NA, 1, 0, 0, 0, 0, 0), D = c(NA, 1, 0, 1, 0,
0, 1), E = c(NA, 1, 0, 1, 0, 0, 1)), row.names = c(NA, -7L), class = "data.frame")
当我提到所有名称时,代码有效
df %>%
rowwise() %>%
mutate(New = case_when(any(c(A,B,C,D,E) == 1) ~ 1,
all(c(A,B,C,D,E) == 0 ) ~ 0
))
我可以通过向量中的名称,例如cols <- colnames(df)
,然后在case_when
解决方案
要回答您的问题,您可以cur_data()
在dplyr
1.0.0 或c_across()
library(dplyr)
df %>%
rowwise() %>%
mutate(New = case_when(any(cur_data() == 1) ~ 1,
all(cur_data() == 0 ) ~ 0))
# A B C D E New
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 NA NA NA NA NA NA
#2 1 0 1 1 1 1
#3 0 0 0 0 0 0
#4 0 1 0 1 1 1
#5 0 0 0 0 0 0
#6 0 0 0 0 0 0
#7 0 0 0 1 1 1
与c_across()
:
df %>%
rowwise() %>%
mutate(New = case_when(any(c_across()== 1) ~ 1,
all(c_across()== 0 ) ~ 0))
但您也可以使用以下方法解决此问题rowSums
:
df %>%
mutate(New = case_when(rowSums(. == 1, na.rm = TRUE) > 0 ~ 1,
rowSums(. == 0, na.rm = TRUE) == ncol(.) ~ 0))
推荐阅读
- python - 如何开发一个循环来扫描数组中的连续值
- c# - 在 Kestrel .NET Core 中加载由中间 CA 签名的 SSL 证书的正确方法
- c# - 如何获取填充了sql数据的datagridview的选定单元格值?
- css - css 网格垂直和水平对齐,不会干扰背景颜色或图像
- javascript - 如何使用键值对获取数组的最后一个索引
- angular - 生成组件并自动添加到 git
- python - 多处理管理器 dict 自动关闭文件
- flutter - 如何制作可用于多项选择题的小部件按钮?
- python - Docker - Ubuntu 中的主管抛出 ENOEXEC 错误
- bash - 我可以在命令之间添加参数吗?