为了账号安全,请及时绑定邮箱和手机立即绑定

计算有关数据子集的统计信息

计算有关数据子集的统计信息

宝慕林4294392 2019-10-22 21:55:36
这是我的数据的一个可重现的小示例:> mydata <- structure(list(subject = c(1, 1, 1, 2, 2, 2), time = c(0, 1, 2, 0, 1, 2), measure = c(10, 12, 8, 7, 0, 0)), .Names = c("subject", "time", "measure"), row.names = c(NA, -6L), class = "data.frame")> mydatasubject  time  measure1          0      101          1      121          2       82          0       72          1       02          2       0我想生成一个包含该measure特定主题的平均值的新变量,因此:subject  time  measure  mn_measure1          0      10      101          1      12      101          2       8      102          0       7      2.3332          1       0      2.3332          2       0      2.333除了以编程方式遍历所有记录或首先重塑为宽格式之外,是否有一种简单的方法可以做到这一点?
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

使用base R函数ave(),尽管其名称令人困惑,它仍可以计算各种统计信息,包括mean:


within(mydata, mean<-ave(measure, subject, FUN=mean))


  subject time measure      mean

1       1    0      10 10.000000

2       1    1      12 10.000000

3       1    2       8 10.000000

4       2    0       7  2.333333

5       2    1       0  2.333333

6       2    2       0  2.333333

请注意,我within只是为了缩短代码而使用。这是没有的等效项within():


mydata$mean <- ave(mydata$measure, mydata$subject, FUN=mean)

mydata

  subject time measure      mean

1       1    0      10 10.000000

2       1    1      12 10.000000

3       1    2       8 10.000000

4       2    0       7  2.333333

5       2    1       0  2.333333

6       2    2       0  2.333333


查看完整回答
反对 回复 2019-10-22
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

或者与data.table包:


require(data.table)

dt <- data.table(mydata, key = "subject")

dt[, mn_measure := mean(measure), by = subject]


#   subject time measure mn_measure

# 1:       1    0      10  10.000000

# 2:       1    1      12  10.000000

# 3:       1    2       8  10.000000

# 4:       2    0       7   2.333333

# 5:       2    1       0   2.333333

# 6:       2    2       0   2.333333


查看完整回答
反对 回复 2019-10-22
  • 3 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信