【问题标题】:How to aggregate data.table on multiple dimensoins如何在多个维度上聚合 data.table
【发布时间】:2015-05-13 04:55:19
【问题描述】:

我有一个数据表,我想根据多个字段汇总数据表。这是我的数据的简化示例:

# each record is the number of pages read
# by a student in a given day
pages_per_day <- data.table(
  student_id = c(1,1,1,2,2,2),
  week_of_semester = c(1,1,2,1,2,2),
  pages_read = c(8,6,4,7,8,7)
)

我想根据 student_id 和 week 汇总这些数据,以显示每个学生在学期给定的一周内阅读的平均页数。我尝试了以下方法:

avg_weekly_pages_read <- grades[,list(
  avg_pages = sum(pages_read) / .N,
  by = c('student_id','week')
)]

这给了我一个包含列的两列数据表:avg_pages, by。

我希望有一张更像:

student_id, week, avg_pages
1,1,7
1,2,4
2,1,7
2,2,7.5

非常感谢任何指导。

【问题讨论】:

  • 我建议从 data.table 简介 HTML vignette here.. 开始
  • 感谢您的建议。我一定会通读的。

标签: r data.table


【解决方案1】:

你正在寻找

pages_per_day[, .(avg_pages = mean(pages_read)), by = .(student_id, week_of_semester)]
#    student_id week_of_semester avg_pages
# 1:          1                1       7.0
# 2:          1                2       4.0
# 3:          2                1       7.0
# 4:          2                2       7.5

顺便说一句,无需重新发明轮子。 R中有一个mean函数

【讨论】:

  • 谢谢大卫。除了 .() 语法对我不起作用之外,这非常有效。相反,我使用了 c(),一切都很好。
  • 你有什么data.table 版本?这应该适用于最新的。
【解决方案2】:
 aggregate(pages_read~student_id+week_of_semester,pages_per_day,mean)
student_id week_of_semester pages_read
# 1          1                1        7.0
# 2          2                1        7.0
# 3          1                2        4.0
# 4          2                2        7.5

【讨论】:

  • 仅供参考,否决票(不是来自我)是因为提问者似乎想用data.table 语法回答
  • 我想补充一下弗兰克所说的 - 这不仅仅是有一个data.table 的答案。如果您的答案更优雅或更快,或者有其他优点,它会得到支持。
猜你喜欢
  • 2012-07-26
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2021-06-26
  • 1970-01-01
相关资源
最近更新 更多