通过r中另一个变量的类别计算平均值

时间:2019-10-23 02:24:29

标签: r dplyr

我有一个这样的数据集示例:

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 个答案:

答案 0 :(得分:1)

您需要将类别值添加到汇总表中。由于每个id的类别值都是恒定的,因此使用summary函数中的均值的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   

我的计算与您的计算略有不同,请在接受之前仔细检查我的方法。