r - 如何在数据帧的特定索引中插入行,其中仅在 R pipe dplyr 中包含上面几行的总和

标签 r dataframe dplyr tidyverse rows

对于下面的数据框,

df <- data.frame(id = c(rep(101, 4), rep(202, 3)),
                status = c("a","b","c","d", "a", "b", "c"),
                wt = c(100,200,100,105, 20,22,25),
                ht = c(5.3,5.2,5,5.1, 4.3,4.2,4.1))
    
df
   id status  wt  ht
1 101      a 100 5.3
2 101      b 200 5.2
3 101      c 100 5.0
4 101      d 105 5.1
5 202      a  20 4.3
6 202      b  22 4.2
7 202      c  25 4.1

我想得到下面的输出:

> output
   id status  wt   ht
1 101      a 100  5.3
2 101      b 200  5.2
3 101      c 100  5.0
4 101      d 105  5.1
5 101    sum 505 20.6
6 202      a  20  4.3
7 202      b  22  4.2
8 202      c  25  4.1
9 202    sum  67 12.6

df 来自一系列管道,我不想停止它并做类似的事情

output <- rbind(df[1:4,],
                c(101, "sum", colSums(df[1:4, c(3,4)])),
                df[5:7,],
                c(202, "sum", colSums(df[5:7, c(3,4)])))

我正在寻找整洁、好看的!实现这一目标的方式。非常感谢任何帮助或想法。

df %>%
   ....

最佳答案

我们可以在按“id”分组后使用adorn_totals

library(dplyr)
library(janitor)
df %>% 
  group_by(id) %>%
  group_modify(~ .x %>% 
      adorn_totals(cols = c(wt, ht), name = 'sum')) %>%
  ungroup

-输出

# A tibble: 9 × 4
     id status    wt    ht
  <dbl> <chr>  <dbl> <dbl>
1   101 a        100   5.3
2   101 b        200   5.2
3   101 c        100   5  
4   101 d        105   5.1
5   101 sum      505  20.6
6   202 a         20   4.3
7   202 b         22   4.2
8   202 c         25   4.1
9   202 sum       67  12.6

关于r - 如何在数据帧的特定索引中插入行,其中仅在 R pipe dplyr 中包含上面几行的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72232051/

相关文章:

python - 如何矢量化我的函数以加快数据帧上的操作?

r - 按组查找插值,也许使用 dplyr

r - dplyr 字符串作为列引用

R基于两列合并或查找单元格值

r - 将 data.frame 列表中的列表取消列出为单个 data.frame

R ggplot geom_bar 错误 : Discrete value supplied to continuous scale

r - 将列表转换为 R 中的数据框并添加带有子列表名称的列

r - 操纵日期和连续结果

r - 如何按所有列对 data.frame 进行排序

r - 安装ggp​​lot “subscript out of bounds” 错误