其他
怎么批量合并 data.frame ?
缘分也是有保质期的吗?
怎么批量合并 data.frame ?
嗯...,这是个困扰我很久的问题了,想通过指定一个数量 i,就可以合并多少个一样的数据框,今天在做 QPCR-explorer 细节优化的时候想了一下解决了。
分享给大家:
library(tidyverse)
library(purrr)
# 新建一个数据data.frame
da <- data.frame(a=1:2,b=LETTERS[1:2])
da
da
a b
1 1 A
2 2 B
假如我们想按行合并 2 次,是不是可以这样做:
rbind(da,da)
a b
1 1 A
2 2 B
3 1 A
4 2 B
按列合并 2 次:
cbind(da,da)
a b a b
1 1 A 1 A
2 2 B 2 B
这样还不是要自己一个一个打上去?哈哈哈,写个循环试试:
lst <- list()
for (i in 1:2) {
lst[[i]] <- da
}
# 合并
lst %>% do.call(rbind,.)
a b
1 1 A
2 2 B
3 1 A
4 2 B
# 按列合并
lst <- list()
for (i in 1:2) {
lst[[i]] <- da
}
# 合并
lst %>% do.call(cbind,.)
a b a b
1 1 A 1 A
2 2 B 2 B
看起来是可以的,我们只要把 for 循环里的 2 换成想要合并的次数就可以了。
把代码用 lapply 简化一下:
lst <- list()
lapply(1:2, function(x){
lst[[x]] <- da
}) %>% Reduce(rbind,.)
a b
1 1 A
2 2 B
3 1 A
4 2 B
也可以用 replicate 函数,感觉这个还挺简洁的:
replicate(2,da,simplify = F) %>% bind_rows()
a b
1 1 A
2 2 B
3 1 A
4 2 B
lapply 合并的函数还可以接好多个,结果都是一样的:
lst <- list()
lapply(1:3, function(x){
lst[[x]] <- da
}) %>% bind_rows()
lapply(1:3, function(x){
lst[[x]] <- da
}) %>% do.call('rbind',.)
lapply(1:3, function(x){
lst[[x]] <- da
}) %>% map_dfr(rbind)
应该也还有很多其它的方法,大家自己去探索。
继续推送一下二维码,扫码即可进群:
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,打赏一下吧!