2016-12-01 4 views
3

"comp"라는 항목 (예, 아니오)에 2 개의 숙련도 변수 (theta0, theta1)가 포함 된 배열이 있습니다. 이를 하나의 행렬로 변환해야합니다. 아래 행렬처럼 행렬을 변환 할 수있는 방법이 있습니까?배열을 R 행렬로 변환

내 배열은 다음과 같습니다

>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" 

내가 사과, 난 당신이 놀 수있는 일을 생성 할 수 없습니다.

+0

tidyr :: s pread (as.data.frame.table (priCPT.i6), Var3, Freq)' – alistaire

답변

6

쉽게 3 마진 행렬을 병합하여 값의 열을 얻을 수 있습니다 ...

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]])) 

나머지는 "희미한"열을 추가하는 것입니다 :

z2 <- expand.grid(dimnames(priCPT.i6)[1:2]) 

이제 데이터 프레임에 병합 할 수 있습니다 reshape2을 것이 사용

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 
+1

귀하의 빠르고 정확한 답변을 보내 주셔서 감사합니다. 이것은 내 질문에 완전히 대답했다. 정말 고마워. 좋은 하루 되세요! – amisos55

+0

아. 나는 처음에는'as.data.frame.table (x)'를 사용하는 것을 생각했지만, 적절하게 적용하는 좋은 방법은 알지 못했다. 단지'dcast (as.data.frame.table (x), Var1 + Var2 ~ Var3, value.var = "Freq")' – user20650

+0

'ftable (x)'이 유용 할 때 가장 좋을 것입니다. 또는'dd rawr

3

대한 대안 : z2의 열 특성 동안 z1의 열을 통해) 숫자 때문에 itely은 매트릭스보다 데이터 프레임을 필요 be

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

library(reshape2) 
df <- dcast(melt(x), Var1+Var2~Var3) 
df 

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

도움이되는 항목을 보내 주셔서 감사합니다. – amisos55