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

时间:2018-07-11 03:04:05

标签: r simulation

我有以下使用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
}

但是它不起作用。有人可以告诉我找出错误吗?

2 个答案:

答案 0 :(得分:2)

这是tidyverse的一个选项,其中我们transpose将对象{{1}和{Y1s}分别list绑定到map中的列中创建listtibble

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

或者使用lapply中的base R提取

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

答案 1 :(得分:2)

使用do.call cbind,将它们合并为一个数据帧,然后我们将其拆分为预期的输出

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