首页 > 解决方案 > 在 R 中聚合具有条件的行

问题描述

我的例子

df <- data.frame(id1 = c("a" , "b", "c"),
                 id2 = c("a", "a", "d"),
                 n1 = c(2,2,0),
                 n2 = c(2,1,1),
                 n3 = c(0,1,1),
                 n4 = c(0,1,1))

首先,我已经像这样聚合了列中的所有行

df <- df %>%
group_by(id2) %>% 
summarise(across(c(n1,n2,n3,n4), sum, na.rm = TRUE), 
            .groups = "drop")

现在,但现在我只想聚合acolumn 中的前 2 行id2id1自从我想要这样的输出以来,我们如何保持专栏。老实说,该列仅用于比较id2并且非常多余,但我真的想保留它。

id1 id2 n1 n2 n3 n4 
a   a   4  3  1  1
c   d   0  1  1  1

对此有什么建议吗?

标签: rtidyverse

解决方案


更改id2其中包含的值'a'

library(dplyr)

df %>%
  group_by(id1 = ifelse(id2 == 'a', id2, id1), id2) %>% 
  summarise(across(starts_with('n'), sum, na.rm = TRUE), .groups = "drop")

#  id1   id2      n1    n2    n3    n4
#  <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#1 a     a         4     3     1     1
#2 c     d         0     1     1     1

推荐阅读