【发布时间】:2020-01-30 06:06:02
【问题描述】:
我试图通过将最终数据集中的所有变量保存在 dplyr 包中来计算时间平均值。
我的示例数据集如下所示:
library(dplyr)
id <- c(1,1,1,1, 2,2,2,2, 3,3,3,3, 4,4,4,4)
gender <- c(1,1,1,1, 2,2,2,2, 2,2,2,2, 1,1,1,1)
item.id <-c(1,1,1,2, 1,1,2,2, 1,2,3,4, 1,2,2,3)
sequence<-c(1,2,3,1, 1,2,1,2, 1,1,1,1, 1,1,2,1)
time <- c(5,6,7,1, 2,3,4,9, 1,2,3,9, 5,6,7,8)
data <- data.frame(id, gender, item.id, sequence, time)
> data
id gender item.id sequence time
1 1 1 1 1 5
2 1 1 1 2 6
3 1 1 1 3 7
4 1 1 2 1 1
5 2 2 1 1 2
6 2 2 1 2 3
7 2 2 2 1 4
8 2 2 2 2 9
9 3 2 1 1 1
10 3 2 2 1 2
11 3 2 3 1 3
12 3 2 4 1 9
13 4 1 1 1 5
14 4 1 2 1 6
15 4 1 2 2 7
16 4 1 3 1 8
id 代表学生 ID,gender 代表性别,item.id 代表学生参加的问题 ID,sequence 是尝试解决问题的序列号,因为学生可能会返回问题并尝试回答再次,time 是每次试验所花费的时间。
在计算时间的平均值时,我需要遵循三个步骤:
(a) 学生对每个问题进行多次试验。我需要计算具有多次试验的每个项目的平均时间。
(b) 然后计算每个id 的总时间平均值。例如,对于id=1,我有两个项目,第一个项目有 3 个试验,第二个项目有 1 个试验。首先我需要通过(5+6+7)/3=6 聚合第一项的时间,所以id=1 有item1 时间6 和item2 时间1。其次,取6 和1 并计算该学生(6+1)/2=3.5 的平均值。
(c) 最后,我想保留数据集中的所有变量。
data <- data %>%
group_by(id) %>%
select(id, gender, item.id, sequence, time) %>%
summarize(mean.time = mean(time))
我知道了,但显然这只是通过不考虑每次试验的平均值来汇总平均值,这也没有保留所有变量:
> data
# A tibble: 4 x 2
id mean.time
<dbl> <dbl>
1 1 4.75
2 2 4.5
3 3 3.75
4 4 6.5
我以为select() 会保留所有变量。
最终的数据集应如下所示:
> data
id gender item.id sequence time mean.time
1 1 1 1 1 5 3.5
2 1 1 1 2 6 3.5
3 1 1 1 3 7 3.5
4 1 1 2 1 1 3.5
5 2 2 1 1 2 4.5
6 2 2 1 2 3 4.5
7 2 2 2 1 4 4.5
8 2 2 2 2 5 4.5
9 3 2 1 1 1 3.75
10 3 2 2 1 2 3.75
11 3 2 3 1 3 3.75
12 3 2 4 1 9 3.75
13 4 1 1 1 5 6.5
14 4 1 2 1 6 6.5
15 4 1 2 2 7 6.5
16 4 1 3 1 8 6.5
我使用了dplyr,但打开了任何其他解决方案。
提前致谢!
【问题讨论】: