R - 使用 dplyr 聚合连续变量
R - using dplyr to aggregate on a continuous variable
所以我有一个参与者数据的数据框,其中我有参与者 ID,其中每一个都有一堆目标值(连续)和预测值。
目标值是一个连续变量,但可能值的数量有限,每个参与者都会对这些目标值的一个子集进行预测。
例如,拿这个数据框:
data.frame(
subjectID = c(rep("p001",4),rep("p002",4),rep("p003",4)),
target = c(0.1,0.2,0.3,0.4,0.2,0.3,0.4,0.5,0.1,0.3,0.4,0.5),
pred = c(0.12, 0.23, 0.31, 0.42, 0.18, 0.32, 0.44, 0.51, 0.09, 0.33, 0.41, 0.55)
)
有 5 个可能的目标值:0.1、0.2、0.3、0.4 和 0.5,但每个参与者只预测了其中的 4 个值。我想获得每个目标值 target
的平均预测 pred
。每个参与者都有一个小组,这更加复杂,我只想在每个小组内取平均值。
我尝试使用 summarise_at
但它不喜欢连续数据,虽然我在 R 编码方面很有经验,但我已经有很长一段时间没有做过数据汇总操作等了。
我可以在 for 循环中很容易地做到这一点,但我想学会正确地做到这一点,但我在谷歌搜索了很长时间后找不到解决方案。
非常感谢
H
只需在 group_by
中添加第二个分组变量:
df <- data.frame(
subjectID = c(rep("p001",4),rep("p002",4),rep("p003",4)),
group = c(rep("A", 8), rep("B", 4)),
target = c(0.1,0.2,0.3,0.4,0.2,0.3,0.4,0.5,0.1,0.3,0.4,0.5),
pred = c(0.12, 0.23, 0.31, 0.42, 0.18, 0.32, 0.44, 0.51, 0.09, 0.33, 0.41, 0.55)
)
df %>%
group_by(target, group) %>%
summarise(mean(pred))
输出:
# A tibble: 9 x 3
# Groups: target [?]
target group `mean(pred)`
<dbl> <chr> <dbl>
1 0.100 A 0.120
2 0.100 B 0.0900
3 0.200 A 0.205
4 0.300 A 0.315
5 0.300 B 0.330
6 0.400 A 0.430
7 0.400 B 0.410
8 0.500 A 0.510
9 0.500 B 0.550
所以我有一个参与者数据的数据框,其中我有参与者 ID,其中每一个都有一堆目标值(连续)和预测值。
目标值是一个连续变量,但可能值的数量有限,每个参与者都会对这些目标值的一个子集进行预测。
例如,拿这个数据框:
data.frame(
subjectID = c(rep("p001",4),rep("p002",4),rep("p003",4)),
target = c(0.1,0.2,0.3,0.4,0.2,0.3,0.4,0.5,0.1,0.3,0.4,0.5),
pred = c(0.12, 0.23, 0.31, 0.42, 0.18, 0.32, 0.44, 0.51, 0.09, 0.33, 0.41, 0.55)
)
有 5 个可能的目标值:0.1、0.2、0.3、0.4 和 0.5,但每个参与者只预测了其中的 4 个值。我想获得每个目标值 target
的平均预测 pred
。每个参与者都有一个小组,这更加复杂,我只想在每个小组内取平均值。
我尝试使用 summarise_at
但它不喜欢连续数据,虽然我在 R 编码方面很有经验,但我已经有很长一段时间没有做过数据汇总操作等了。
我可以在 for 循环中很容易地做到这一点,但我想学会正确地做到这一点,但我在谷歌搜索了很长时间后找不到解决方案。
非常感谢
H
只需在 group_by
中添加第二个分组变量:
df <- data.frame(
subjectID = c(rep("p001",4),rep("p002",4),rep("p003",4)),
group = c(rep("A", 8), rep("B", 4)),
target = c(0.1,0.2,0.3,0.4,0.2,0.3,0.4,0.5,0.1,0.3,0.4,0.5),
pred = c(0.12, 0.23, 0.31, 0.42, 0.18, 0.32, 0.44, 0.51, 0.09, 0.33, 0.41, 0.55)
)
df %>%
group_by(target, group) %>%
summarise(mean(pred))
输出:
# A tibble: 9 x 3
# Groups: target [?]
target group `mean(pred)`
<dbl> <chr> <dbl>
1 0.100 A 0.120
2 0.100 B 0.0900
3 0.200 A 0.205
4 0.300 A 0.315
5 0.300 B 0.330
6 0.400 A 0.430
7 0.400 B 0.410
8 0.500 A 0.510
9 0.500 B 0.550