我想将多维数组(例如x,y,z;请参阅下面的'arr')转换为data.frame,但保留一个维在列中(例如z,见下面的'df2')。将数组融入data.frame,但将一维转换为列
目前,我在reshape2包中使用了熔化和dcast函数。
set.seed(1111)
num <- 1000
dim_names <- list(x = seq(num), y = seq(num),
z = paste0('Z', 1:5))
dim_arr <- as.numeric(lapply(dim_names, length))
arr <- array(runif(prod(dim_arr)), dim = dim_arr)
dimnames(arr) <- dim_names
library(reshape2)
df <- melt(arr)
head(df)
system.time(df2 <- dcast(df, x + y ~ z, value.var = 'value'))
head(df2)
x y Z1 Z2 Z3 Z4 Z5
1 1 1 0.4655026 0.8027921 0.1950717 0.0403759 0.04669389
2 1 2 0.5156263 0.5427343 0.5799924 0.1911539 0.26069063
3 1 3 0.2788747 0.9394142 0.9081274 0.7712205 0.68748300
4 1 4 0.2827058 0.8001632 0.6995503 0.9913805 0.25421346
5 1 5 0.7054767 0.8013255 0.2511769 0.6556174 0.07780849
6 1 6 0.5576141 0.6452644 0.3362980 0.7353494 0.93147223
然而,花了大约10秒至5转换的M值
user system elapsed
8.13 1.11 9.39
是否有更有效的方法?感谢您的任何建议。
感谢您的建议。不过,我可能需要更通用的解决方案,因为我的数组有大约10个维度。 – Bangyou
发表一个缺乏足够的复杂性以使准确答案有用的例子总是一个坏主意。浪费我们的时间和你的时间。 –