从数据框列表中将选定的数据框添加在一起

2024-03-16

当我尝试将微观解决方案应用于宏观尺度时,我遇到了大问题。我想编写一个函数,使我能够自动将特定数据帧的所有值添加在一起。

首先,我创建了所有数据框的列表:

> 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 等)。在此示例中,有 10 个数据帧按以下顺序组织,其中lst:

 [1] 1 1 2 2 2 2 2 2 3 2

手动添加所有“1”我会看起来像这样:

> 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

data

v1 <-  c(1, 1, 2, 2, 2, 2, 2, 2, 3, 2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从数据框列表中将选定的数据框添加在一起 的相关文章

随机推荐