这是我第一次就堆栈溢出问一个问题.我试过寻找答案,但我找不到我想要的东西.我希望有人能帮帮忙.
我有一个20416观测的庞大数据集.基本上,我有83个科目,每个科目我有几个观察.然而,每个受试者的观察数量不相同(例如,受试者1具有256个观察结果,而受试者2仅具有64个观察结果).我想添加一个额外的列,其中包含每个主题的观察结果(观察结果是阅读时间(RT)).
我尝试使用聚合函数:
aggregate (RT ~ su, data, mean)
该公式返回每个主题的正确平均值.但后来我不能简单地做到以下几点:
data$mean <- aggregate (RT ~ su, data, mean)
因为R返回此错误:
$ < - .data.frame(tmp,"mean",value = list(su = 1:83,RT = c(378.1328125,:替换有83行,数据有20416)出错
我知道公式缺少一个命令,指定必须为所有主题行重复每个主题的平均值(例如,如果主题1有256行,则主题1的平均值必须重复256行,如果主题2有64行,主题2的平均值必须重复64行,依此类推).
我怎样才能在R中实现这一目标?
该data.table
语法本身很适合这样的问题:
Dt[, Mean := mean(Value), by = "ID"][] # ID Value Mean # 1: a 0.05881156 0.004426491 # 2: a -0.04995858 0.004426491 # 3: b 0.64054432 0.038809830 # 4: b -0.56292466 0.038809830 # 5: c 0.44254622 0.099747707 # 6: c -0.10771992 0.099747707 # 7: c -0.03558318 0.099747707 # 8: d 0.56727423 0.532377247 # 9: d -0.60962095 0.532377247 # 10: d 1.13808538 0.532377247 # 11: d 1.03377033 0.532377247 # 12: e 1.38789640 0.568760936 # 13: e -0.57420308 0.568760936 # 14: e 0.89258949 0.568760936
当我们应用分组操作(by = "ID"
)时,data.table
将自动复制每个组的mean(Value)
适当次数(避免您遇到上述错误).
数据:
Dt <- data.table::data.table( ID = sample(letters[1:5], size = 14, replace = TRUE), Value = rnorm(14))[order(ID)]