arrays - 将数组转换为 R 中的矩阵

标签 arrays r matrix data-conversion

我有一个数组,其中包括一个名为“comp”的项目(是,否)上的两个熟练变量(theta0、theta1)。这需要转换为一个矩阵。有什么办法可以转换像底部那样的矩阵吗?

我的数组如下所示:

>priCPT.i6

 , , comp = Yes

 theta1
theta0       Low       Med      High
  Low  0.8377206 0.6760511 0.4576021
  Med  0.6760511 0.4576021 0.2543239
  High 0.4576021 0.2543239 0.1211734

, , comp = No

  theta1
theta0       Low       Med      High
  Low  0.1622794 0.3239489 0.5423979
  Med  0.3239489 0.5423979 0.7456761
  High 0.5423979 0.7456761 0.8788266

attr(,"class")
[1] "CPA"   "array"

我很抱歉,我无法制作您可以玩的东西。我正在寻找类似的东西:
theta0   theta1   Yes        No
Low      Low      0.8377206  0.1622794
Low      Med      ..         ..
Low      High     ..         ..
Med      Low      ..         ..
Med      Med      ..         ..
Med      High     ..         ..
High     Low      ..         ..
High     Med      ..         ..
High     High     ..         ..

问候...

最佳答案

您可以通过展平第三个边距上的矩阵来轻松获取值列:

z1 <- apply(priCPT.i6, 3L, c)
## we can also simply use `matrix`; but remember to set `dimnames`
## otherwise we lose dimnames
## z1 <- matrix(priCPT.i6, ncol = 2L,
##              dimnames = list(NULL, dimnames(priCPT.i6)[[3]]))

剩下的就是附加“dimnames”列:
z2 <- expand.grid(dimnames(priCPT.i6)[1:2])

现在您可以通过以下方式将它们合并到一个数据框(您肯定需要一个数据框而不是矩阵,因为 z1 的列是数字,而 z2 的列是字符):
data.frame(z2, z1)

可重现的示例
x <- array(1:18, dim = c(3L, 3L, 2L), dimnames = list(
           c("Low", "Medium", "High"), c("Low", "Medium", "High"), c("Yes", "No")))

#, , Yes
#
#       Low Medium High
#Low      1      4    7
#Medium   2      5    8
#High     3      6    9
#
#, , No
#
#       Low Medium High
#Low     10     13   16
#Medium  11     14   17
#High    12     15   18

z1 <- apply(x, 3L, c)
## z1 <- matrix(x, ncol = 2L, dimnames = list(NULL, dimnames(x)[[3]]))
z2 <- expand.grid(dimnames(x)[1:2])
data.frame(z2, z1)

#    Var1   Var2 Yes No
#1    Low    Low   1 10
#2 Medium    Low   2 11
#3   High    Low   3 12
#4    Low Medium   4 13
#5 Medium Medium   5 14
#6   High Medium   6 15
#7    Low   High   7 16
#8 Medium   High   8 17
#9   High   High   9 18

关于arrays - 将数组转换为 R 中的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921426/

相关文章:

c# - 如何在托管 (C#) 和非托管 (C++) 代码之间来回传递数组内容

c# - 检索三列并按一分组

c++ - 交换内部和外部 vector

matlab - 矩阵的第一个非单维究竟是什么?

matlab - 将完整矩阵转换为完整矩阵很慢?

javascript - 遍历嵌套的 json 数组

javascript - 需要将对象添加到处于状态的数组中

r - 找到最接近的封闭 FALSE 值位置

r - 如果 dplyr 中满足条件,则直接对行进行条件求和

r - 使用 Shiny Server 和 Docker 将应用程序日志输出到标准输出