вычисление среднего по категориям другой переменной в r - PullRequest
0 голосов
/ 23 октября 2019

У меня есть пример набора данных, подобного этому:

id <-       c(1,1,1, 2,2,2, 3,3, 4,4, 5,5,5,5, 6,6,6, 7, 8,8)
item.id <-  c(1,1,2, 1,1,1 ,1,1, 1,2, 1,2,2,2, 1,1,1, 1, 1,2)
sequence <- c(1,2,1, 1,2,3, 1,2, 1,1, 1,1,2,3, 1,2,3, 1, 1,1)
score <-    c(0,0,0, 0,0,1, 1,0, 1,1, 1,0,1,1, 0,0,0, 1, 0,1)
category <- c(2,2,2, 3,3,3, 1,1, 3,3, 1,1,1,1, 4,4,4, 2, 3,3)

data <- data.frame("id"=id, "item.id"=item.id, "sequence"=sequence, "score"=score, "category"=category)
> data
   id item.id sequence score category
1   1       1        1     0        2
2   1       1        2     0        2
3   1       2        1     0        2
4   2       1        1     0        3
5   2       1        2     0        3
6   2       1        3     1        3
7   3       1        1     1        1
8   3       1        2     0        1
9   4       1        1     1        3
10  4       2        1     1        3
11  5       1        1     1        1
12  5       2        1     0        1
13  5       2        2     1        1
14  5       2        3     1        1
15  6       1        1     0        4
16  6       1        2     0        4
17  6       1        3     0        4
18  7       1        1     1        2
19  8       1        1     0        3
20  8       2        1     1        3

id представляет людей, item.id - для вопросов. sequence - для попытки изменить ответ, а score - балл по предмету, category - категория, к которой относится каждый студент.

Я хочу захватитьМаксимальный порядковый номер для каждого id на item.id, затем рассчитайте средний балл максимального значения последовательности для каждого category. Я смог выполнить первый шаг, но не смог понять, как взять кросс-таблицу среднего значения максимального порядкового номера на category.

library(dplyr)
    data %>%
      group_by(id,item.id) %>%
      summarize(max.seq = max(sequence))
    # A tibble: 12 x 3
    # Groups:   id [?]
          id item.id max.seq
       <dbl>   <dbl>   <dbl>
     1     1       1       2
     2     1       2       1
     3     2       1       3
     4     3       1       2
     5     4       1       1
     6     4       2       1
     7     5       1       1
     8     5       2       3
     9     6       1       3
    10     7       1       1
    11     8       1       1
    12     8       2       1

Результат второго шага должен быть следующим:

category           1     2    3    4 
mean(max(seq))     2    1.33 1.4   3

Есть предложения?

Заранее спасибо!

1 Ответ

1 голос
/ 23 октября 2019

Вам необходимо получить значение категории в сводной таблице. Поскольку значение категории является постоянным для каждого идентификатора, комбинация item.id с использованием среднего значения в итоговой функции является односторонней.

library(dplyr)
data %>%
  group_by(id,item.id) %>%
  summarize(cat=mean(category), max.seq = max(sequence)) %>% 
  group_by(cat) %>% summarize(mean(max.seq))

# A tibble: 4 x 2
    cat `mean(max.seq)`
  <dbl>           <dbl>
1     1            2   
2     2            1.33
3     3            1.4 
4     4            3   

Мои расчеты немного отличаются от ваших, пожалуйста, дважды проверьте мой метод, прежде чем принимать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...