这不是一个很好的题目.我想对每个组的数据框中的某些列求和,不包括我的每个组的一列.一个简单的例子如下:
df <- tibble(group_name = c("A", "B","C"), mean_A = c(1,2,3), mean_B = c(2,3,4), mean_C=c(3,4,5))
df %>% group_by(group_name) %>% mutate(m1 = sum(across(contains("mean"))))
这将创建m1列,它是每组平均值a、平均值b和平均值c的总和.我想做的是排除a组的平均值a、b组的平均值b和c组的平均值c.不过,下面的方法不起作用(这并不奇怪).
df %>% group_by(group_name) %>% mutate(m1 = sum(across(c(contains("mean") & !contains(group_name)))))
你知道我该怎么做吗?我的原始数据包含更多的组,因此很难手动完成.
编辑:我try 了下面的方法,它以一种基本的方式解决了这个问题,但是有些东西(?grepl)在这里似乎不太管用,我得到了错误的结果.
df %>% pivot_longer(!group_name) %>% mutate(value2 = case_when(grepl(group_name, name) ~ 0, TRUE ~ value)) %>% group_by(group_name) %>% summarise(m1 = sum(value2))
Edit2:找出上面和下面的错误,但仍然有很多警告,所以我建议大家关注下面TarJae的回应
df %>% pivot_longer(!group_name) %>% group_by(group_name) %>% mutate(value2 = case_when(grepl(group_name, name) ~ 0, TRUE ~ value)) %>% group_by(group_name) %>% summarise(m1 = sum(value2))