当前位置:  开发笔记 > 编程语言 > 正文

计算每个受试者的平均值并重复每个受试者行的值

如何解决《计算每个受试者的平均值并重复每个受试者行的值》经验,为你挑选了1个好方法。

这是我第一次就堆栈溢出问一个问题.我试过寻找答案,但我找不到我想要的东西.我希望有人能帮帮忙.

我有一个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中实现这一目标?



1> nrussell..:

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)]

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有