R data.table: 找出两个子集行的平均值差异

3
我有一个按组分组的年度值的R data.table,并且想要找出两个子期间之间平均值的差异。
library(data.table)
mydt = data.table(year = rep(2000:2005, each = 2),
                  myvar = 1:12,
                  grouper = rep(c('A', 'B'), times = 6))

下面的代码可以得到我想要的输出,但我相信肯定有更高效和可读性更好的方法来实现这个结果吧?
mydt[year < 2003, 
     .(early = mean(myvar)),
     by = "grouper"
    ][mydt[year > 2002,
           .(late = mean(myvar)),
           by = "grouper"],
      on = "grouper"
     ][,
       period_diff := late - early
      ][, 
        c("grouper", "period_diff")]
2个回答

4
在每个by=操作中使用[]索引:
mydt[, .(period_diff = mean(myvar[year > 2002]) - mean(myvar[year < 2003])), by="grouper"]
#   grouper period_diff
#    <char>       <num>
#1:       A           6
#2:       B           6

1
另一种解决问题的方法:
mydt[order(year), mean(myvar), by=.(grouper, year<2003)][, .(period_diff = diff(V1)), by=.(grouper)]

   grouper period_diff
1:       A           6
2:       B           6

不错的选择!人们如何知道这个period_diff函数会返回-6还是+6呢? - climatestudent
不错的选择!人们如何知道这个period_diff函数会返回-6还是+6呢? - undefined
1
@climatestudent 谢谢你的评论。我已经更新了我的回答。 - B. Christian Kamgang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接