合并或变异摘要 (dplyr)

Posted

技术标签:

【中文标题】合并或变异摘要 (dplyr)【英文标题】:merge or mutate a summary (dplyr) 【发布时间】:2015-08-23 02:49:18 【问题描述】:

我总是不确定如何使用 dplyr 检索摘要。

假设我有一个个人和家庭的摘要。

dta = rbind(c(1, 1, 45), 
  c(1, 2, 47), 
  c(2, 1, 24),
  c(2, 2, 26), 
  c(3, 1, 67), 
  c(4, 1, 20),
  c(4, 2, 21),
  c(5, 3, 7)
 ) 
dta = as.data.frame(dta)
colnames(dta) = c('householdid', 'id', 'age')

 householdid id age
           1  1  45
           1  2  47
           2  1  24
           2  2  26
           3  1  67
           4  1  20
           4  2  21
           4  3   7

假设我想计算家庭中的人数和家庭的平均年龄,然后在原始数据集中重新使用这些信息。

dta %>% 
  group_by(householdid) %>% 
  summarise( nhouse = n(), meanAgeHouse = mean(age) ) %>% 
  merge(., dta, all = T)

我经常使用merge,但有时当数据集很大时它会很慢。 有没有可能

mutate 

而不是

merge ? 

【问题讨论】:

是的,只要dta %>% group_by(householdid) %>% mutate( nhouse = n(), meanAgeHouse = mean(age) ) 我还建议查看 data.table 包。这些东西在 data.table 中非常直接且非常快。它具有回收价值的概念,这在这里会有所帮助。 @DavidArenburg 提供的解决方案非常好,如果您想保留结果,只需使用该代码和分配 data <- code by David。这似乎是合理的,dplyr 足够聪明且足够快,不会重新分配内存,而只是指向添加了新元素的旧对象。 @DavidArenburg 非常感谢您!请把它作为答案 【参考方案1】:
dta %>% group_by(householdid) %>% mutate( nhouse = n(), meanAgeHouse = mean(age) )

【讨论】:

以上是关于合并或变异摘要 (dplyr)的主要内容,如果未能解决你的问题,请参考以下文章

dplyr:为什么个人计数摘要和索引摘要有所不同

当我在`dplyr`之后加载`plyr`时,为啥汇总或变异不适用于group_by?

当我在`dplyr`之后加载`plyr`时,为啥汇总或变异不适用于group_by?

自定义函数与dplyr变异或汇总因子中的不同级别?

R dplyr 在列索引上发生变异

带有 dplyr 的用户定义函数 - 变异列是一个参数