在R中的数据帧内聚合不同级别的数据

时间:2018-07-25 20:39:31

标签: r dataframe aggregate

我正在处理一个数据框,其中的数据存储在较低级别。每行都是一个案例,每列都是一个结果。我想将此数据聚合到两个更高的级别,而又不会丢失原始信息。数据如下:

=

产生以下内容:

!=

我正在寻找一种创建八个新列的方法,这些新列将a-d(在第1级)聚合到第2级和第3级。因此,完成的数据框将有8个新列,总共15列。四个将-d汇总到第二级,而四个将-d汇总到第三级。

我知道这将在许多行中创建冗余(尤其是在第3级),但这不是问题。

2 个答案:

答案 0 :(得分:2)

带有data.table:

library(data.table)
setDT(df)
df[, a_level2 := sum(a), by = level2]

带底基R

agg <- aggregate(a ~ level2, data=df, FUN=sum)
names(agg)[2] <- "a_level2"
df <- merge(df, agg, by="level2")

使用Tidyverse / dplyr

library(dplyr)
df <- df %>% 
    group_by(level2) %>% 
    summarise(a_level2 = sum(a)) %>% 
    right_join(df, by="level2")

答案 1 :(得分:1)

library(dplyr)
df %>%
  group_by(level2) %>%
  mutate(a_lvl2 = sum(a), 
         b_lvl2 = sum(b), 
         c_lvl2 = sum(c), 
         d_lvl2 = sum(d)) %>%
  group_by(level3) %>%
  mutate(a_lvl3 = sum(a), 
         b_lvl3 = sum(b), 
         c_lvl3 = sum(c), 
         d_lvl3 = sum(d))