r - 在 mutate 而不是 left_join 中使用 summarise
问题描述
我想知道这个工作流程是否可以改进:
dummy <- tibble(
x = c(rep("A", 5), rep("B", 5), rep("C", 5)),
value = c(1:15)
)
dummy %>%
group_by(x) %>%
summarise(rowsum = sum(value)) %>%
mutate(s = sum(rowsum)) %>%
left_join((dummy %>% pivot_longer(-x)), by = "x")
理想情况下,我宁愿不使用调用原始数据框的 left_join - 有人对此有更好的建议吗?
解决方案
一个选项是replace
除了第一个元素之外的元素NA
并获取sum
library(dplyr)
library(tidyr)
dummy %>%
pivot_longer(-x) %>%
group_by(x) %>%
mutate(rowsum = sum(value),
s = replace(rowsum, row_number() != 1, NA)) %>%
ungroup %>%
mutate(s = sum(s, na.rm = TRUE))
# A tibble: 15 x 5
# x name value rowsum s
# <chr> <chr> <int> <int> <int>
# 1 A value 1 15 120
# 2 A value 2 15 120
# 3 A value 3 15 120
# 4 A value 4 15 120
# 5 A value 5 15 120
# 6 B value 6 40 120
# 7 B value 7 40 120
# 8 B value 8 40 120
# 9 B value 9 40 120
#10 B value 10 40 120
#11 C value 11 65 120
#12 C value 12 65 120
#13 C value 13 65 120
#14 C value 14 65 120
#15 C value 15 65 120
或不使用pivot_longer
dummy %>%
mutate(s = sum(value)) %>%
group_by(x) %>%
mutate(rowsum = sum(value))
推荐阅读
- jersey-2.0 - 带有杰克逊序列化问题的 Jersey 2
- python - 根据两个字段的总和过滤数据
- ios - TableView 单元格选择无法正常工作
- javascript - 用双引号包裹一个 javascript 变量
- mysql - 如何使用 Federated Engine(Mysql) 到 Postgresql 表迁移
- css - rangeslider thumb 落后于火狐浏览器的轨道..如何修复它?我在下面给出的代码
- android - 将 glibc / libintl.h 添加到 Android NDK 项目
- python - Python Discord.py - ctx 是必需的参数
- python - 基于 Django 函数的表单无效
- jquery-mobile - Jquery mobile Swipe 事件未使用 Knockout.js 触发