将数组转换为R中的矩阵 [英] Converting array to matrix in R
问题描述
我有一个数组,在名为"comp"的项(是,否)上包括两个熟练程度变量(theta0,theta1).这需要转换为一个矩阵.有什么方法可以转换像底部那样的矩阵?
I have an array, including two proficiency variables (theta0, theta1) over an item (Yes, No) called "comp". This needs to be converted to one matrix. Is there any way that I could convert a matrix like the one at the bottom?
我的数组如下:
>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"
很抱歉,我无法制作出您可以玩的东西.我正在寻找类似的东西:
I apologize, I could not produce something that you could play with. I am looking for something like:
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 .. ..
关于...
推荐答案
您可以通过将矩阵的第3个边距展平来轻松获得值的列:
You can easily get columns of values by flattening the matrix on the 3rd margin:
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]]))
剩下的您需要添加假名"列:
What you need for the rest is to append the "dimnames" columns:
z2 <- expand.grid(dimnames(priCPT.i6)[1:2])
现在,您可以通过以下方式将它们合并到数据框中(肯定需要一个数据框而不是矩阵,因为z1
的列是数字,而z2
的列是字符).
Now you can merge them into a data frame (you definitely need a data frame than a matrix, because columns of z1
are numeric while columns of z2
are character) via:
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
这篇关于将数组转换为R中的矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!