Как я могу создать 3-х стороннюю структуру данных для неровных данных? - PullRequest
1 голос
/ 18 октября 2019

У меня неточные данные, когда в разных школах в разных городах есть разные классы.

city <- c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3)

school <- c(1,1,1,1,1,1,2,2,2,3,3,3,4,4,4,4,5,5,5,6,6,7,7,7,7,7,
8,8,8,8,9,9,9,9,9,9,10,10,10,10,10,10,10)

x1 <- c(23,43,12,23,34,43,23,23,12,23,34,17,36,26,25,28,33,33,33,13,25,25,
35,34,23,19,18,27,33,28,23,23,12,23,34,17,36,23,34,17,36,26,25)

x2 <- c(33,13,25,25,35,34,23,19,18,27,23,43,12,23,34,43,23,23,12,23,33,33,
28,23,23,12,23,34,17,36,23,34,17,36,26,25,34,17,36,26,25,28,33)

x3 <- c(22,18,25,23,22,33,23,22,18,22,28,38,26,18,19,28,27,23,26,24,37,28,
28,22,24,17,24,32,16,38,25,33,19,31,25,24,32,18,33,23,22,25,36)

data<- data.frame(city,school,x1,x2,x3)

Я хочу создать трехсторонние структуры данных и использовать цикл для доступа к значениям каждого класса (x1-x3)?

(примечание: я не ищу список в списке [[]], поскольку не могу использовать его с r-jags).

Как указать разное количество классов и школ? одно из предложений - использовать максимальное количество классов в каждой школе!

for (i in length(unique(city))) {  # number of cities
  for (j in ... ) { # number of school in each city
    for (k in ... )  # number of classes in each school
      y[k,j,i] <- mean + beta1*x1[k,j,i] + beta2*x2[k,j,i]
  }
}

Обратите внимание, мои предоставленные данные представляют собой подмножество огромных данных. Я хочу использовать цикл для извлечения каждого отдельного значения (например, x1 [1,1,1] = 23). Кроме того, есть ли способ указать все различные измерения для школ и классов?

1 Ответ

0 голосов
/ 18 октября 2019

Это может делать то, что вы хотите. Кадр данных данных может быть преобразован в трехмерный массив.

X <- array(NA, dim=c(3, 10, 3), dimnames=list(city=1:3, school=1:10,
     classes=c("X1", "X2", "X3")))
X[,,1] <- xtabs(x1~city + school, data)
X[,,2] <- xtabs(x2~city + school, data)
X[,,3] <- xtabs(x3~city + school, data)
str(X)
#  num [1:3, 1:10, 1:3] 178 0 0 58 0 0 74 0 0 0 ...
#  - attr(*, "dimnames")=List of 3
#   ..$ city   : chr [1:3] "1" "2" "3"
#   ..$ school : chr [1:10] "1" "2" "3" "4" ...
#   ..$ classes: chr [1:3] "X1" "X2" "X3"
ftable(X, row.vars=c(1, 3), col.vars=2)
#              school   1   2   3   4   5   6   7   8   9  10
# city classes                                               
# 1    X1             178  58  74   0   0   0   0   0   0   0
#      X2             165  60  93   0   0   0   0   0   0   0
#      X3             143  63  88   0   0   0   0   0   0   0
# 2    X1               0   0   0 115  99  38 136 106   0   0
#      X2               0   0   0 112  58  56 119 110   0   0
#      X3               0   0   0  91  76  61 119 110   0   0
# 3    X1               0   0   0   0   0   0   0   0 132 197
#      X2               0   0   0   0   0   0   0   0 161 199
#      X3               0   0   0   0   0   0   0   0 157 189
...