【问题标题】:Columnwise sum of a data frame with different data types in R [duplicate]R中具有不同数据类型的数据帧的按列总和[重复]
【发布时间】:2021-10-15 17:53:35
【问题描述】:

我有一个包含多列的数据框,我想添加一个包含所有列总和的顶行。

mydf
id name val1 val2 val3 val4
1 abc 1 3 2.2 3.1
2 def 2 3 3.2 1.3

这就是我正在尝试的

tot<-mydf %>%
    summarize_if(is.numeric, sum, na.rm=TRUE)

但这只会显示 val1 和 val2 的总和。

Desired output

id name val1 val2 val3 val4
Total  3 6 5.4 4.4
1 abc 1 3 2.2 3.1
2 def 2 3 3.2 1.3

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可能需要adorn_totals

    library(janitor)
    library(dplyr)
    mydf %>%
       adorn_totals()
    

    -输出

       id name val1 val2 val3 val4
         1  abc    1    3  2.2  3.1
         2  def    2    3  3.2  1.3
     Total    -    3    6  5.4  4.4
    

    或者使用dplyr

    library(dplyr)
    mydf %>% 
       summarise(id = c('', id), name = c('Total', name), 
         across(starts_with('val'), ~c(sum(., na.rm = TRUE), .)))
      id  name val1 val2 val3 val4
    1    Total    3    6  5.4  4.4
    2  1   abc    1    3  2.2  3.1
    3  2   def    2    3  3.2  1.3
    

    数据

    mydf <- structure(list(id = 1:2, name = c("abc", "def"), val1 = 1:2, 
        val2 = c(3L, 3L), val3 = c(2.2, 3.2), val4 = c(3.1, 1.3)), 
    class = "data.frame", row.names = c(NA, 
    -2L))
    

    【讨论】:

      【解决方案2】:

      你可以使用tibble::add_row:

      library(tibble)
      
      add_row(mydf, name  = "Total", 
              summarize(mydf, across(starts_with("val"), ~ sum(., na.rm = T))))
      

      默认情况下,它附加在底部。

      输出

        id  name val1 val2 val3 val4
      1  1   abc    1    3  2.2  3.1
      2  2   def    2    3  3.2  1.3
      3 NA Total    3    6  5.4  4.4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多