【问题标题】:R Dplyr Add Rows TotalR Dplyr 添加行总数
【发布时间】:2022-12-11 03:28:53
【问题描述】:
HAVE = data.frame(STUDENT = c(1,2,3,4),
                  SCORE1 = c(5,9,8,0),
                  TEST = c(7,11,3,9))

WANT = data.frame(STUDENT = c(1,2,3,4, 'ALL'),
                  SCORE1 = c(5,9,8,0,22),
                   TEST = c(7,11,3,9,30))

我有“拥有”并希望创建“想要”来执行此操作: 向 HAVE 添加行,其中 STUDENT = 'ALL' 和 SCORE1 = 对 SCORE 的所有值求和,TEST = 对 TEST 的所有值求和。

我尝试这个没有成功:

WANT = rowbind(HAVE, data.frame(STUDENT = 'ALL', SCORE1 = sum(HAVE$SCORE1), TEST = sum(HAVE$TEST))

但是有没有高效的 DPLYR 解决方案呢?

【问题讨论】:

    标签: r dplyr tally


    【解决方案1】:

    dplyr

    library(dplyr)
    
    HAVE %>% 
      mutate(STUDENT = as.character(STUDENT)) %>% 
      bind_rows(summarise(.,
                          across(where(is.numeric), sum),
                          across(where(is.character), ~"All")))
    
      STUDENT SCORE1 TEST
    1       1      5    7
    2       2      9   11
    3       3      8    3
    4       4      0    9
    5     All     22   30
    

    或者也许使用 janitor 包:

    libray(dplyr)
    library(janitor)
    HAVE %>% 
      adorn_totals("row") 
    
     STUDENT SCORE1 TEST
           1      5    7
           2      9   11
           3      8    3
           4      0    9
       Total     22   30
    

    【讨论】:

    • 这太完美了!假设还有一些其他的 COLUMNS,您希望“总计”为空,您可以指定留空吗?就像如果有 YEAR 列,我们不想总结 YEAR...我们只是希望它是 NA
    【解决方案2】:

    希望这有效!

    HAVE = data.frame(STUDENT = c(1,2,3,4),
                      SCORE1 = c(5,9,8,0),
                      TEST = c(7,11,3,9)) %>% 
      mutate(STUDENT = as.character(STUDENT))
    
    WANT = bind_rows(HAVE, data.frame(STUDENT = 'ALL', SCORE1 = sum(HAVE$SCORE1),
                                      TEST = sum(HAVE$TEST)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多