首页 > 解决方案 > 将列表中的列转换为 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
}

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

标签: rsimulation

解决方案


这是一个选项tidyverse,其中我们transpose将对象分别指向list“X1”和“Y1s”,然后将其中的列绑定以map创建slisttibble

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

最好将其保存在 a 中list,但如果我们想要单独的对象

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

或者使用lapplyfrom进行提取base R

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

推荐阅读