我的数据看起来像这样:
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中编写代码来为跨越数万行的数据框执行此操作?
编辑:我可能需要将代码推广到几个协变量。因此,例如,除了白天,我们可能有"位置",因此我们只想在同一位置对同一天对应同一患者的所有行进行平均。
答案 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