3

我需要将数据框转换为 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) )

谢谢!

4

2 回答 2

2

This works with your example, I hope it will be general enough for you:

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

identical(ga, gb)
# [1] TRUE
于 2013-09-15T20:29:28.580 回答
2

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

abind( split(gdf, gdf$X1), along=3)
于 2013-09-16T22:44:05.740 回答