将列表中的列转换为 R 中的数据框

Convert columns in a list to a data frame in R

我有以下使用 R 创建的列表,

set.seed(326581)
X1=rnorm(10,0,1)
Y1=rnorm(10,0,2)
data=data.frame(X1,Y1)

lst <- replicate(
  100,
  df.smpl <- data %>% sample_n(10, replace = T),
  simplify = FALSE)

此列表代表 100 个样本,其中每个样本有 2 列 (X,Y),样本大小为 10。

我需要将所有 X 列拆分为一个数据框,将 Y 列拆分为一个数据框。所以最后我应该有 2 个数据框,每个数据框有 100 列和 10 行。

我试过这个循环,

new1=c()
new2=c()
for(i in 1:100)
{
  new1[i]=lst[[i]]$X
  new2[i]=lst[[i]]$Y
}

但它不起作用。谁能告诉我找出错误?

这是一个带有 tidyverse 的选项,其中我们 transpose 将对象分别 list 和 'Y1s',然后将 transpose 中的列绑定到 map 创建一个 listtibbles

library(tidyverse)
out <- transpose(lst) %>% 
              map(bind_cols)

最好放在一个list中,但如果我们想要单独的对象

outx <- out[[1]]
outy <- out[[2]]
dim(outx)
#[1]  10 100
dim(outy)
#[1]  10 100

或者使用 lapplybase R

中提取
data.frame(lapply(lst, `[`, 'X1'))
data.frame(lapply(lst, `[`, 'Y1'))

使用 do.call cbind,将它们连接成一个数据帧,然后我们拆分数据帧以获得预期的输出

s=do.call("cbind", lst)
Y=s[,seq(2,200,2)]
X=s[,seq(1,200,2)]