将数据帧转换为3D数组

时间:2013-09-15 20:17:20

标签: arrays r

我需要将数据帧转换为3维数组。数据框中的所有列都是数字。什么是一种优雅和/或有效的方法来实现这一目标?

示例:

x <- 1:3
y <- 1:3

g <- t(vapply(x, function(x){ 
      vapply(y, function(y){ 
          as.numeric(paste(x,y,sep="."))}, numeric(1))}, numeric(3)))

gdf <- data.frame( cbind(rep(1:3,each=3), rbind(g, g*2, g*3)) )

我想将“gdf”转换为gdf $ x1定义第三个维度的数组。结果如下:

ga <- array( c(g, g*2, g*3), dim=c(3,3,3) )

谢谢!

2 个答案:

答案 0 :(得分:2)

这适用于您的示例,我希望它对您来说足够通用:

gb <- aperm(array(unlist(gdf[, -1]), c(3, 3, 3)), c(1, 3, 2))

identical(ga, gb)
# [1] TRUE

答案 1 :(得分:2)

我也发现这种方式使用包abind:

abind( split(gdf, gdf$X1), along=3)