为数据帧列表应用函数

时间:2013-09-23 08:12:14

标签: r

我有以下数据:

 seed(1) 
 X <- data.frame(matrix(rnorm(2000), nrow=10))#### the dataset

以下代码创建了1000个自举数据集“x”和1000个自举数据集“y”,每个数据集为5列。

 colnums_boot <- replicate(1000,sample.int(200,10))
 output<-lapply(1:1000, function(i){
 Xprime <- X[,colnums_boot[1:5,i]]
 Yprime <- X[,colnums_boot[6:10,i]]
 xy <- list(x=Xprime,y=Yprime )
 } )

我获得了一个数据框列表“xy”的列表,我想要应用这个特定的代码,但不理解列表索引操作。

从输出“xy”

考虑第一个列表[1]

$x and

$y

我想申请代码:

 X= cor($x) 
 Y= cor($y) separately and then 
 sapply(1:10, function(row) cor(X[row,], Y[row,]))

这将为列表[1]的每一行“r1”提供一个值。

我想将它应用于整个列表并分别从列表[1],列表[2]中获取r1,r2等等......直到1000并最终将其作为数据帧。最终它将是一个十万维数据框架。

1 个答案:

答案 0 :(得分:1)

我找不到我写的那个Xprime,Yprime位的问题;我希望你没有删除它......?如果我没记错的话,我建议这样做,因为处理矩阵要高效得多:

Z <- as.matrix(X)
Xprime2 <- array(,dim=c(10,5,1000))
Yprime2 <- array(,dim=c(10,5,1000))
Xprime2[] <- Z[,colnums_boot[1:5,]]
Yprime2[] <- Z[,colnums_boot[6:10,]]

无论如何,在您的设置中,正如@KarlForner所评论的那样,这将为您提供X和Y列之间的相关性

lapply(output,function(ll) cor(ll$x,ll$y))

这在引导时也可能是低效的,因为您将计算相同200个向量之间的相关性。我认为在前面计算它们cor(X)更有意义,然后从那里获取值......

至于把它放到data.frame中,我不清楚这意味着什么。