r - 应用 group_by 和 summarise(sum) 但保留大量附加列
问题描述
我想按一个变量对我的数据框进行分组,总结另一个变量,但保留所有其他关联的列。
在应用 group_by 并汇总数据同时保留所有列的信息时,接受的答案是使用 filter() 或 slice(),如果答案已经存在于数据中(即 min,max),则可以正常工作,但这并不如果您想使用生成新答案(即总和,均值)的函数,请工作。
在应用 group_by 和 summarise(sum) 但保留不相关的冲突数据的列?公认的答案是使用您想要保留的所有列作为分组变量的一部分。但是,如果您想保留许多列,这似乎是一个无效的解决方案。例如,我正在处理的数据有 26 个附加列。
我想出的最佳解决方案是拆分应用组合。但这似乎很笨拙——当然必须有一个可以在单个管道中完成的解决方案。
例子:
location <- c("A", "A", "B", "B", "C", "C")
date <- c("1", "2", "1", "2", "1", "2")
count <- c(3, 6, 4, 2, 7, 5)
important_1 <- c(1,1,2,2,3,3)
important_30 <- c(4,4,5,5,6,6)
df <- data.frame(location = location, date = date, count = count, important_1 = important_1, important_30 = important_30)
我想总结在同一地点的不同日期发生的计数。我想保留所有重要的(想象有 30 个而不是 2 个)。
到目前为止我的解决方案:
check <- df %>%
group_by(location) %>%
summarise(count = sum(count))
add2 <- df %>%
select(-count, -date) %>%
distinct()
results <- merge(check, add2)
有没有办法可以在一条管道中完成此任务?我宁愿保持井井有条,并尽可能避免创建新对象。
解决方案
我们可以创建一个列mutate
然后应用distinct
library(dplyr)
df %>%
group_by(location) %>%
mutate(count = sum(count)) %>% select(-date) %>%
distinct(location, important_1, important_30, .keep_all = TRUE)
如果有多个列名,我们也可以使用syms
tosymbol
和 evaluate ( !!!
)
df %>%
group_by(location) %>%
mutate(count = sum(count)) %>% select(-date) %>%
distinct(location, !!! rlang::syms(names(.)[startsWith(names(.), 'important')]), .keep_all = TRUE)
推荐阅读
- javascript - Google Charts Timeline 使用 react-google-charts 更改条形高度
- php - Drupal 8 节点添加/编辑表单显示 WSOD
- javascript - 如何清理 Node-pg 中的 ILIKE 查询
- youtube-dl - 当我将要使用 youtube-dl 下载的文件列表收集到文件中时,命名模式不起作用
- sqlite - 我想在 vs 代码中运行 sqlite 代码,但它显示 sqlite 未被识别为内部或外部命令
- c# - 尝试访问 localhost 上的服务时找不到服务资源
- r - R使用scale_linetype_manual在ggplot图例中旋转vline
- python - 二进制设置文件扩展名
- python - 通过使用python在每一行上制作框来提取文本
- ios - 颤振构建 ios 和 xcode 构建都失败并出现奇怪的错误