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?
My array looks like this:
>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 .. ..
Regards...
Add the Array To Matrix function to the block diagram. Wire the array to the Array To Matrix function. Right-click the Array To Matrix function and select Create»Indicator from the shortcut menu to create a matrix indicator. Run the VI.
Convert a Data Frame into a Numeric Matrix in R Programming – data. matrix() Function. data. matrix() function in R Language is used to create a matrix by converting all the values of a Data Frame into numeric mode and then binding them as a matrix.
A matrix function in R is a 2-dimensional array that has m number of rows and n number of columns. In other words, matrix in R programming is a combination of two or more vectors with the same data type. Note: It is possible to create more than two dimensions arrays with matrix function in R.
A matrix is a two-dimensional (r × c) object (think a bunch of stacked or side-by-side vectors). An array is a three-dimensional (r × c × h) object (think a bunch of stacked r × c matrices). All elements in an array must be of the same data type (character > numeric > logical).
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])
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)
Reproducible example
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With