我有一个这样的数据集示例:
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
有什么建议吗?
谢谢!
答案 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
我的计算与您的计算略有不同,请在接受之前仔细检查我的方法。