gpt4 book ai didi

r rowSums in case_when

转载 作者:行者123 更新时间:2023-12-02 15:47:11 24 4
gpt4 key购买 nike

考虑到这是我的数据集

df <- 
structure(list(id = 1:6, w = c(NA, 11L, 12L, 13L, 14L, 15L),
x = c(20L, 21L, NA, 23L, 24L, 25L), y = c(30L, 31L, 32L,
NA, 34L, 35L), z = c(40L, NA, 42L, 43L, 44L, NA), Group = c("Group1",
"Group2", "Group2", "Group2", "Group3", "Group3")), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))


id w x y z Group
1 NA 20 30 40 Group1
2 11 21 31 NA Group2
3 12 NA 32 42 Group2
4 13 23 NA 43 Group2
5 14 24 34 44 Group3
6 15 25 35 NA Group3

我正在尝试按组逐行对 w、x、y、z 列的观察值求和。我正在使用这样的 case_when 语句。

df <- df %>%
mutate(

group1_total <- case_when( Group = "Group1" ~ rowSums(w,x, na.rm = TRUE)),
group2_total <- case_when( Group = "Group2" ~ rowSums(w,x,z, na.rm = TRUE)),
group3_total <- case_when( Group = "Group3" ~ rowSums(w,x,y,z, na.rm = TRUE))

)

我收到一条错误消息,rowSums() 出错。不确定我做错了什么。非常感谢任何建议或帮助,谢谢。

最佳答案

我会创建一个命名列表,我们在其中指定要为每个组求和的变量。

cur_data() 返回当前组的数据,group_cols[[unique(Group)]] 为每个组选择合适的列。

library(dplyr)

group_cols <- list('Group1' = c('w', 'x'), 'Group2' = c('w', 'x', 'z'),
'Group3' = c('w', 'x', 'y', 'z'))

df %>%
group_by(Group) %>%
mutate(total = rowSums(select(cur_data(),
group_cols[[unique(Group)]]), na.rm = TRUE)) %>%
ungroup

# id w x y z Group total
# <int> <int> <int> <int> <int> <chr> <dbl>
#1 1 NA 20 30 40 Group1 20
#2 2 11 21 31 NA Group2 32
#3 3 12 NA 32 42 Group2 54
#4 4 13 23 NA 43 Group2 79
#5 5 14 24 34 44 Group3 116
#6 6 15 25 35 NA Group3 75

这样做的好处是计算是按组而不是按行进行的。

关于r rowSums in case_when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73761234/

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