在data.frames列表中合并n个列表
我有3个在data.frames列表中合并n个列表,r,list,R,List,我有3个列表,每个列表都有长度固定的n元素(示例中为10个): 用c和rbind至少我把它们按正确的顺序组合了起来,但我想不出一种方法把它们放在数据框中 ab你可以这样做: n_lists <- 3 # length(ls(pattern = "my_list")) n_cols_each <- 4 # length(get(ls(pattern = "my_list")[[1]])) temp <- do.call(data.frame, mget(ls(pattern =
列表
,每个列表都有长度固定的n
元素(示例中为10个):
用c
和rbind
至少我把它们按正确的顺序组合了起来,但我想不出一种方法把它们放在数据框中
ab你可以这样做:
n_lists <- 3 # length(ls(pattern = "my_list"))
n_cols_each <- 4 # length(get(ls(pattern = "my_list")[[1]]))
temp <- do.call(data.frame, mget(ls(pattern = "my_list")))
final <- lapply(
1:n_lists,
function(x) setNames(temp[x + (0:(n_cols_each-1))*3], paste0("v", 1:n_cols_each))
)
lapply(final, head, 2)
[[1]]
v1 v2 v3
1 1 31 a
2 2 32 a
[[2]]
v1 v2 v3
1 11 41 b
2 12 42 b
[[3]]
v1 v2 v3
1 21 51 c
2 22 52 c
你也可以试试这个
res <- list()
for(i in 1:3) {
res[[i]] <- data.frame(V1=my_list[[i]], V2=my_list2[[i]], V3=my_list3[[i]])
}
map(res, head, 2)
[[1]]
V1 V2 V3
1 1 31 a
2 2 32 a
[[2]]
V1 V2 V3
1 11 31 a
2 12 32 a
[[3]]
V1 V2 V3
1 21 31 a
2 22 32 a
res有多种解决方案:
library(tidyverse)
map(transpose(mget(ls(pattern = 'my_list'))),~set_names(as.tibble(.x),paste0("V",1:length(.x))))
你也可以
split.default(map_dfc(mget(ls(pattern='my_list')),~.x),f=row(diag(3)))
您还可以决定形成分组数据帧:
map_df(set_names(transpose(mget(ls(pattern = 'my_list'))),1:3),~.x)
我正在运行它,谢谢你的更新。看来你的是目前为止最快的。在接受你的解决方案之前,如果有人有其他解决方案,我会等待。@AndreElrico刚刚做了-我们的解决方案在这个小数据集上是可比的。lappy(purrr::transpose(mget(ls(pattern='my_list'))、函数(x)setNames(data.frame(x,stringsAsFactors=F)、paste0(“V”,1:length(x))
@Onyambu,有趣,可能是目前为止最好的解决方案,除非OP想坚持以R为基数。
res <- list()
for(i in 1:3) {
res[[i]] <- data.frame(V1=my_list[[i]], V2=my_list2[[i]], V3=my_list3[[i]])
}
map(res, head, 2)
[[1]]
V1 V2 V3
1 1 31 a
2 2 32 a
[[2]]
V1 V2 V3
1 11 31 a
2 12 32 a
[[3]]
V1 V2 V3
1 21 31 a
2 22 32 a
library(tidyverse)
map(transpose(mget(ls(pattern = 'my_list'))),~set_names(as.tibble(.x),paste0("V",1:length(.x))))
split.default(map_dfc(mget(ls(pattern='my_list')),~.x),f=row(diag(3)))
map_df(set_names(transpose(mget(ls(pattern = 'my_list'))),1:3),~.x)