我需要将数据帧转换为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) )
谢谢!
答案 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)