【问题标题】:Group rows based one column and sum up the rest of the columns [duplicate]基于一列对行进行分组并总结其余列[重复]
【发布时间】:2021-11-12 00:17:15
【问题描述】:

我尝试按 ID 列对 data.frame 的行进行分组,并对所有数字列求和并删除字符串列。为此,我创建了一个小的 data.frame df1:

   ID string 2018 2019 2020 2021
1: a1     x2    3    3    0    4
2: a2     g3    5    5    4    0
3: a2     n2   11    6   13    3
4: a1     m3    3   21    9    8
5: a2     2w    9    1   16    5
6: a1    ps2   22    4    7    4
7: a1    kg2    6    0    9    6

我试着像 df2 那样得到年份的总和:

   ID 2018 2019 2020 2021
1: a1   34   28   25   22
2: a2   25   12   33    8

我正在尝试使用 dplyr 的 group_by 和 summarise 功能,但我无法得到我想要的。

library(dplyr)
df1 %>%
  group_by(ID) %>%
  summarize(df$2018 = sum(2018))

非常感谢

【问题讨论】:

  • 你能展示你当前和预期的输出吗?从代码中,不清楚您需要什么。
  • 部分是的,谢谢提示

标签: r dataframe group-by


【解决方案1】:

你可以使用

library(data.table)

df1[, lapply(.SD[, `2018`:`2021`], sum), by = ID]

返回

   ID 2018 2019 2020 2021
1: a1   34   28   25   22
2: a2   25   12   33    8

【讨论】:

    【解决方案2】:

    您可以使用cross函数来帮助您选择正确的列

    library(tidyverse)
    
    library(data.table)
    #> 
    #> Attaching package: 'data.table'
    #> The following objects are masked from 'package:dplyr':
    #> 
    #>     between, first, last
    #> The following object is masked from 'package:purrr':
    #> 
    #>     transpose
    df1 = data.table(
      ID = c("a1", "a2", "a2", "a1", "a2", "a1", "a1"),
      "string" = c("x2", "g3", "n2", "m3", "2w", "ps2", "kg2"),
      "2018" = c(3,5,11,3,9,22,6),
      "2019" = c(3,5,6,21,1,4,0),
      "2020" = c(0,4,13,9,16,7,9),
      "2021" = c(4,0,3,8,5,4,6))
    
    
    df2 = data.table(
      ID = c("a1", "a2"),
      "2018" = c(34,25),
      "2019" = c(28,12),
      "2020" = c(25,33),
      "2021" = c(22,8))
    
    df1 |> 
      group_by(ID) |> 
      summarise(across(where(is.numeric),sum))
    #> # A tibble: 2 x 5
    #>   ID    `2018` `2019` `2020` `2021`
    #>   <chr>  <dbl>  <dbl>  <dbl>  <dbl>
    #> 1 a1        34     28     25     22
    #> 2 a2        25     12     33      8
    

    reprex package (v2.0.1) 于 2021 年 11 月 11 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2021-10-06
      • 2020-07-09
      • 2021-04-29
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多