【发布时间】:2017-03-21 16:32:59
【问题描述】:
使用 dplyr 创建重叠组的最佳方法是什么?
例如,假设您有以下数据集
test <- data.frame(year = rep(as.character(2014:2016), 2), value = 1:6)
你想用一个组来总结每一年,然后是整个时期。 有两种方法可以做到这一点:
使用 bind_rows 和 mutate(在更复杂的示例中可能还有过滤器)
year.totals <- bind_rows(test %>% mutate(year = "2014:2016"),
test) %>%
group_by(year) %>%
summarize(value = sum(value))
使用收集
year.totals.2 <- test %>%
mutate(year.2 = "2014:2016") %>%
gather(drop, year, year, year.2) %>%
group_by(year) %>%
summarize(value = sum(value))
有没有更好的方法来做到这一点?
我也见过this question and answer,我认为这并不算太糟糕,但我宁愿避免使用lapply。
【问题讨论】:
-
您可以在
base R中执行此操作,即addmargins(rowsum(test$value, test$year), 1) -
我也想要一些适用于更复杂示例的东西,例如组可能是“2014:2015”,汇总统计数据可能是平均值或加权平均值等。
-
我问了一个非常相似的问题 (stackoverflow.com/q/39106850/4269699),虽然它更笼统一些。 tl;dr -
dplyr没有明确的这个功能。在没有更好的情况下,我仍然使用bind_rows()方法 -
这是我发的关于gather方法的帖子https://colintb.github.io/overlapping_groups-example/