【问题标题】:R - using dplyr to aggregate on a continuous variableR - 使用 dplyr 聚合一个连续变量
【发布时间】:2018-04-07 15:53:28
【问题描述】:

所以我有一个参与者数据的数据框,其中我有参与者 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

【问题讨论】:

    标签: r summary


    【解决方案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 
    

    【讨论】:

    • 完美,非常整洁。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多