在尝试将我的微解决方案应用于宏观规模时,我遇到了很大的问题.我想编写一个函数,允许我自动将特定数据帧的所有值一起添加.
首先,我创建了所有数据框的列表:
> lst
$data001
A B C D E
X 10 30 50 70
Y 20 40 60 80
$data002
A B C D E
X 10 30 50 70
Y 20 40 60 80
$data003
A B C D E
X 10 30 50 70
Y 20 40 60 80
Z 20 40 60 80
$data004
A B C D E
X 10 30 50 70
Y 20 40 60 80
Z 20 40 60 80
V 20 40 60 80
$data005
A B C D E
Q 10 30 50 70
$data006
A B C D E
X 10 30 50 70
Y 20 40 60 80
$data007
A B C D E
X 10 30 50 70
Y 20 40 60 80
$data008
A B C D E
X 10 30 50 70
Y 20 40 60 80
$data09
A B C D E
X 11 33 55 77
Y 22 44 66 88
$data010
A B C D E
X 10 30 50 70
Y 20 40 60 80
其次,我已经确定了我想要添加的数据帧(添加1到1和2到2等).在此示例中,在lst内按以下顺序组织了10个数据帧:
[1] 1 1 2 2 2 2 2 2 3 2
手动添加所有“的”我会看起来像这样:
> ddply(rbind(lst[[1]],lst[[2]]), "A", numcolwise(sum))
A B C D E
X 20 60 100 140
Y 40 80 120 160
手动添加所有“两个”我会看起来像这样:
A B C D E
X 60 180 300 420
Y 120 240 360 480
Z 40 80 120 160
V 20 40 60 80
Q 10 30 50 70
但是,我只是无法弄清楚如何编写一个循环来创建列表,在本例中,3个数据帧是对所选数据帧求和的结果.
先感谢您!
最佳答案 我们可以使用data.table
library(data.table)
lapply(split(seq_along(lst), v1), function(i)
rbindlist(lst[i], fill=TRUE)[
, lapply(.SD, sum), A, .SDcols= B:E])
#$`1`
# A B C D E
#1: X 20 60 100 140
#2: Y 40 80 120 160
#$`2`
# A B C D E
#1: X 60 180 300 420
#2: Y 120 240 360 480
#3: Z 40 80 120 160
#4: V 20 40 60 80
#5: Q 10 30 50 70
#$`3`
# A B C D E
#1: X 11 33 55 77
#2: Y 22 44 66 88
数据
v1 <- c(1, 1, 2, 2, 2, 2, 2, 2, 3, 2)