我已经找到了使用reshape2做到这一点,但它很慢,并没有完全给我我想要的东西。我有一个看起来像这样的data.frame:
df<-data.frame(expand.grid(1:10,1:10))
colnames(df) <- c("x","y")
for(i in 3:10){
df[i] <- runif(100,10,100)
}
我跑:
require(reshape2)
matrices<-lapply(colnames(df)[-c(1:2)],function(x){
mat<-acast(df, y~x, value.var=x, fill= 0,fun.aggregate = mean)
return(mat)
})
我的数据中有每个值向量的矩阵列表,我可以将其转换为1:10,1:10,1:10维度的数组,但我希望看看是否有更快的数据这样做的方法,因为我的数据集可以包含许多值列,这个过程可能需要很长时间,而我似乎无法找到更有效的方法。
感谢您的帮助。
答案 0 :(得分:0)
如果您的data.frame按照您的说法定期存储,您可以在for
循环中完成此操作,这实际上可能比投射更快:
# preallocate array
myArray <- array(0, dim=c(10,10,10))
# loop through:
for(i in 1:10) {
myArray[,,i] <- as.matrix(df[df$y==i,])
}