我有dataframes的2名列表。每个列表有24个dataframes
list1 <- (data1, data2, ..., data24)
list2 <- (result1, result2, ...., result3)
我想cbind
data1
与result1
,data2
与result2
等。然后rbin
d所有dataframes一起这样的:
all1 <- cbind(data1, result1)
all2 <- cbind(data2, result2)
all.in <- rbind(all1, all2)
如何做到这一点有效地与24个dataframes?
在tidyverse语法,dplyr::bind_rows
和bind_cols
将列表绑定在一起,并通过purrr::map_df
变体调用:
library(tidyverse)
l1 <- list(mtcars[1:2, 1, drop = FALSE], mtcars[3:4, 1, drop = FALSE])
l2 <- list(mtcars[1:2, 2:6], mtcars[3:4, 2:6])
map2_dfr(l1, l2, bind_cols)
#> mpg cyl disp hp drat wt
#> 1 21.0 6 160 110 3.90 2.620
#> 2 21.0 6 160 110 3.90 2.875
#> 3 22.8 4 108 93 3.85 2.320
#> 4 21.4 6 258 110 3.08 3.215
一个.id
参数可被传递给两个bind_rows
和map_dfr
,并会导致一个新列的名称提供由用于哪个列表元素中的每个观测从传来的索引。
我可能会做这样的事情:
l1 <- list(mtcars,mtcars)
l2 <- list(mtcars,mtcars)
do.call(rbind,mapply(FUN = cbind,l1,l2,SIMPLIFY = FALSE))
如果数据帧是非常大的,你可以切换到dplyr或cbind
和rbind
的data.table当量。