如何简化此 R 代码以 rbind 列表的所有表?
How to simplify this R code to rbind all the tables of a list?
必须有一个简单的方法来绑定列表中的所有表,怎么做?
rbind(tempOut[[1]], tempOut[[2]], tempOut[[3]], tempOut[[4]],
tempOut[[5]], tempOut[[6]], tempOut[[7]], tempOut[[8]],
tempOut[[9]], tempOut[[10]], tempOut[[11]], tempOut[[12]],
tempOut[[13]], tempOut[[14]], tempOut[[15]], tempOut[[16]],
tempOut[[17]], tempOut[[18]], tempOut[[19]], tempOut[[20]],
tempOut[[21]], tempOut[[22]], tempOut[[23]], tempOut[[24]],
tempOut[[25]], tempOut[[26]], tempOut[[27]], tempOut[[28]],
tempOut[[29]], tempOut[[30]], tempOut[[31]], tempOut[[32]])
1) do.call 使用第一行提供可重现的测试输入(其中 BOD
是内置的 6 行数据框)我们使用 do.call
和 rbind
如图所示。没有使用包。
tempOut <- list(BOD, 10*BOD, 100*BOD) # test input
do.call("rbind", tempOut)
给予:
Time demand
1 1 8.3
2 2 10.3
3 3 19.0
4 4 16.0
5 5 15.6
6 7 19.8
7 10 83.0
8 20 103.0
9 30 190.0
10 40 160.0
11 50 156.0
12 70 198.0
13 100 830.0
14 200 1030.0
15 300 1900.0
16 400 1600.0
17 500 1560.0
18 700 1980.0
2) Reduce 第二个替代碱基是:
Reduce("rbind", tempOut)
3) packages 还有一些包提供了这个功能,包括 data.table 中的 rbindlist
,dplyr 中的 bind_rows
和 rbind.fill
在 plyr 中。
3a) purrr::map_dfr 如果您想跟踪 table 每行来自哪一个,特别感兴趣的是 purrr 解决方案——另请注意根据@Henrik 的评论,data.table 的 rbindlist
有一个 idcol=
参数。
library(dplyr) # map_dfr from purrr also requires dplyr
library(purrr)
map_dfr(tempOut, identity, .id = "id")
给予:
id Time demand
1 1 1 8.3
2 1 2 10.3
3 1 3 19.0
4 1 4 16.0
5 1 5 15.6
6 1 7 19.8
7 2 10 83.0
8 2 20 103.0
9 2 30 190.0
10 2 40 160.0
11 2 50 156.0
12 2 70 198.0
13 3 100 830.0
14 3 200 1030.0
15 3 300 1900.0
16 3 400 1600.0
17 3 500 1560.0
18 3 700 1980.0
必须有一个简单的方法来绑定列表中的所有表,怎么做?
rbind(tempOut[[1]], tempOut[[2]], tempOut[[3]], tempOut[[4]],
tempOut[[5]], tempOut[[6]], tempOut[[7]], tempOut[[8]],
tempOut[[9]], tempOut[[10]], tempOut[[11]], tempOut[[12]],
tempOut[[13]], tempOut[[14]], tempOut[[15]], tempOut[[16]],
tempOut[[17]], tempOut[[18]], tempOut[[19]], tempOut[[20]],
tempOut[[21]], tempOut[[22]], tempOut[[23]], tempOut[[24]],
tempOut[[25]], tempOut[[26]], tempOut[[27]], tempOut[[28]],
tempOut[[29]], tempOut[[30]], tempOut[[31]], tempOut[[32]])
1) do.call 使用第一行提供可重现的测试输入(其中 BOD
是内置的 6 行数据框)我们使用 do.call
和 rbind
如图所示。没有使用包。
tempOut <- list(BOD, 10*BOD, 100*BOD) # test input
do.call("rbind", tempOut)
给予:
Time demand
1 1 8.3
2 2 10.3
3 3 19.0
4 4 16.0
5 5 15.6
6 7 19.8
7 10 83.0
8 20 103.0
9 30 190.0
10 40 160.0
11 50 156.0
12 70 198.0
13 100 830.0
14 200 1030.0
15 300 1900.0
16 400 1600.0
17 500 1560.0
18 700 1980.0
2) Reduce 第二个替代碱基是:
Reduce("rbind", tempOut)
3) packages 还有一些包提供了这个功能,包括 data.table 中的 rbindlist
,dplyr 中的 bind_rows
和 rbind.fill
在 plyr 中。
3a) purrr::map_dfr 如果您想跟踪 table 每行来自哪一个,特别感兴趣的是 purrr 解决方案——另请注意根据@Henrik 的评论,data.table 的 rbindlist
有一个 idcol=
参数。
library(dplyr) # map_dfr from purrr also requires dplyr
library(purrr)
map_dfr(tempOut, identity, .id = "id")
给予:
id Time demand
1 1 1 8.3
2 1 2 10.3
3 1 3 19.0
4 1 4 16.0
5 1 5 15.6
6 1 7 19.8
7 2 10 83.0
8 2 20 103.0
9 2 30 190.0
10 2 40 160.0
11 2 50 156.0
12 2 70 198.0
13 3 100 830.0
14 3 200 1030.0
15 3 300 1900.0
16 3 400 1600.0
17 3 500 1560.0
18 3 700 1980.0