我正在处理一个数据框,其中的数据存储在较低级别。每行都是一个案例,每列都是一个结果。我想将此数据聚合到两个更高的级别,而又不会丢失原始信息。数据如下:
=
产生以下内容:
!=
我正在寻找一种创建八个新列的方法,这些新列将a-d(在第1级)聚合到第2级和第3级。因此,完成的数据框将有8个新列,总共15列。四个将-d汇总到第二级,而四个将-d汇总到第三级。
我知道这将在许多行中创建冗余(尤其是在第3级),但这不是问题。
答案 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))