r - R中的多维数组到表

标签 r multidimensional-array datatables

我有多维数组

, , 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/

相关文章:

javascript - 如何在columnDefs数据表中动态设置 'targets'

javascript - jQuery dataTable 使用 ajax 加载数据进行排序

r - splitstackshape 根据列和观察的不同行分隔符分割文本\n

c - 为什么将指向数组的指针传递给需要指向 int 的指针的函数可以正常工作而不会出现错误

c++ - 我将如何覆盖打印的二维数组以模拟 'updates'

java - 无法将变量添加到我的数组

jquery - 将 JSON 数据添加到数据表

r - 查找并计算与条件匹配的连续观察值

r - 如何使用R检查数据一致性(确保大小写和值不矛盾)?

java - biomod2 警告消息 : running command 'java' had status 1