R - 使用dplyr在连续变量上聚合

时间:2018-04-07 15:53:28

标签: r summary

所以我有一个参与者数据的数据框,其中我有参与者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个。我想获得每个目标值pred的平均预测target。每个参与者都有一个小组,这使得进一步复杂化,我只想在每个小组中进行平均。

我尝试使用summarise_at,但它并不喜欢连续数据,虽然我在R编码方面经验丰富,但我已经很久了#39}已完成数据汇总操作等。

我可以在for循环中轻松完成这项工作,但我想学会正确地做到这一点,并且在google搜索很长一段时间后我无法找到解决方案。

非常感谢

ħ

1 个答案:

答案 0 :(得分:1)

只需在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