我有多维数组
, , 1
[,1] [,2]
[1,] "0" "a"
[2,] "1" "a"
[3,] "1" "b"
[4,] "1" "b"
[5,] "1" "b"
, , 2
[,1] [,2]
[1,] "0" "a"
[2,] "1" "a"
[3,] "1" "b"
[4,] "0" "b"
[5,] "1" "b"
我想将多维数组转换为表格,这样我就可以获得这样的表格
1 0 a
1 1 a
1 1 b
1 1 b
1 1 b
2 0 a
2 1 a
2 1 b
2 0 b
2 1 b
这可能吗?我想我不能使用 melt
功能。因为这个函数没有给我我想要的数据表
最佳答案
我认为解决您的问题的关键是使用 as.data.frame.matrix
。
可重现的数据:
set.seed(42)
ary <- array(sample(letters, size=20, replace=TRUE), dim=c(5,2,2))
ary[,1,] <- match(ary[,1,], unique(ary[,1,]))
ary
# , , 1
# [,1] [,2]
# [1,] "1" "d"
# [2,] "2" "r"
# [3,] "3" "z"
# [4,] "4" "q"
# [5,] "5" "o"
# , , 2
# [,1] [,2]
# [1,] "6" "n"
# [2,] "7" "t"
# [3,] "8" "z"
# [4,] "4" "r"
# [5,] "2" "o"
答案:
out <- reshape2::dcast(
Var1 + Var3 ~ Var2,
data = as.data.frame.table(ary),
value.var = "Freq")[,-1]
head(out)
# Var3 A B
# 1 A 1 d
# 2 B 6 n
# 3 A 2 r
# 4 B 7 t
# 5 A 3 z
# 6 B 8 z
如果您需要第一列(指示ary
中的列是整数,您可以这样做:
out$Var3 <- match(out$Var3, sort(unique(out$Var3)))
out
# Var3 A B
# 1 1 1 d
# 2 2 6 n
# 3 1 2 r
# 4 2 7 t
# 5 1 3 z
# 6 2 8 z
# 7 1 4 q
# 8 2 4 r
# 9 1 5 o
# 10 2 2 o
只是为了尝试匹配您的输出(按第一列排序):
out[order(out$Var3),]
# Var3 A B
# 1 1 1 d
# 3 1 2 r
# 5 1 3 z
# 7 1 4 q
# 9 1 5 o
# 2 2 6 n
# 4 2 7 t
# 6 2 8 z
# 8 2 4 r
# 10 2 2 o
关于r - R中的多维数组到表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70975024/