R:用平均值

时间:2017-04-22 23:18:09

标签: r

我的数据看起来像这样:

patient day response
Bob "08/08/2011" 5

然而,有时,我们在同一天(来自同一患者)有几个回答。对于所有这样的行,我想用一行代替它们,患者和那天当然是所有那些行的情况,并且响应是它们的平均值。

所以,如果我们也有

patient day response
Bob "08/08/2011" 6

然后我们删除这两行并用

替换它们
patient day response
Bob "08/08/2011" 5.5

如何在R中编写代码来为跨越数万行的数据框执行此操作?

编辑:我可能需要将代码推广到几个协变量。因此,例如,除了白天,我们可能有"位置",因此我们只想在同一位置对同一天对应同一患者的所有行进行平均。

3 个答案:

答案 0 :(得分:0)

所需的输出可以通过以下方式获得:

 aggregate(a$response, by=list(Category=a$patient,a$date), FUN=mean)

答案 1 :(得分:0)

您可以非常轻松地使用dplyr包执行此操作:

library(dplyr)
df %>% group_by(patient, day) %>%
    summarize(response_avg = mean(response))

根据您在group_by中选择的任何变量进行分组,以便添加更多内容。我将新变量命名为“response_avg”,但您也可以将其更改为您想要的变量。

答案 2 :(得分:0)

如果任何reader是data.table用户,只需添加data.table解决方案。

library(data.table)
setDT(df)
df[, response := mean(response, na.rm = T), by = .(patient, day)]
df <- unique(df)   # to remove duplicates