将列表中的列转换为 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
创建一个 list
的 tibble
s
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'))
使用 do.call
cbind
,将它们连接成一个数据帧,然后我们拆分数据帧以获得预期的输出
s=do.call("cbind", lst)
Y=s[,seq(2,200,2)]
X=s[,seq(1,200,2)]
我有以下使用 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
创建一个 list
的 tibble
s
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'))
使用 do.call
cbind
,将它们连接成一个数据帧,然后我们拆分数据帧以获得预期的输出
s=do.call("cbind", lst)
Y=s[,seq(2,200,2)]
X=s[,seq(1,200,2)]