将X-Y data.frame转换为R中每列的矩阵

时间:2016-04-22 16:15:56

标签: r matrix

我已经找到了使用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维度的数组,但我希望看看是否有更快的数据这样做的方法,因为我的数据集可以包含许多值列,这个过程可能需要很长时间,而我似乎无法找到更有效的方法。

感谢您的帮助。

1 个答案:

答案 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,])
}