gpt4 book ai didi

r - 如何在 case_when 中传递列名向量

转载 作者:行者123 更新时间:2023-12-04 02:30:43 25 4
gpt4 key购买 nike

我正在使用 case_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

最佳答案

要回答您的问题,您可以在 dplyr 1.0.0 或 c_across()

中使用 cur_data()
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))

关于r - 如何在 case_when 中传递列名向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64374376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com