Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在data.frames列表中合并n个列表_R_List - Fatal编程技术网

在data.frames列表中合并n个列表

在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 =

我有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 = "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)