【发布时间】:2018-07-25 20:39:30
【问题描述】:
我正在处理数据存储在较低级别的数据框。每一行是一个案例,每一列是一个结果。我想在不丢失原始信息的情况下将这些数据聚合到两个更高的级别。数据如下所示:
set.seed(301)
df <- data.frame(
level1 = c(1:20),
level2 = c(1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6, 6, 7, 8, 9, 9, 10, 11),
level3 = c(rep(1, 8), rep(2, 6), rep(3, 4), rep(4, 2)),
a = round(runif(20, 10000, 20000)),
b = round(runif(20, 0, 100)),
c = round(runif(20, 0, 1000)),
d = round(runif(20, 50000, 90000))
)
这会产生以下内容:
level1 level2 level3 a b c d
1 1 1 1 15971 98 183 64768
2 2 1 1 11322 72 355 75087
3 3 2 1 10021 82 638 86030
4 4 2 1 17540 37 557 73085
5 5 3 1 16141 45 809 66978
6 6 3 1 14337 56 228 75227
7 7 3 1 16648 31 468 74257
8 8 3 1 19809 53 108 68250
9 9 4 2 14344 20 44 68319
10 10 5 2 18439 47 200 77471
11 11 5 2 17576 65 672 71247
12 12 5 2 16972 12 148 89347
13 13 6 2 14986 47 54 70600
14 14 6 2 14492 22 903 71335
15 15 7 3 10702 70 818 70757
16 16 8 3 16815 70 182 71346
17 17 9 3 14595 39 722 62427
18 18 9 3 14407 47 323 80146
19 19 10 4 17453 68 144 72299
20 20 11 4 17332 64 559 53931
我正在寻找一种方法来创建八个新列,将 a - d(位于第 1 级)聚合到第 2 级和第 3 级。因此,完成的数据框将有 8 个新列,总共 15 列。四个将 a - d 汇总到第 2 级,而四个将 a - d 汇总到第 3 级。
我知道这会在许多行中产生冗余(尤其是在第 3 级),但这不是问题。
【问题讨论】: