【问题标题】:Aggregating column totals in R [duplicate]R中的汇总列总计[重复]
【发布时间】:2021-10-03 11:26:26
【问题描述】:

假设我有一个如下所示的数据框:

variable1 <- c(1,1,1,0,1,0)
variable2 <- c(0,0,0,1,1,0)
variable3 <- c(1,0,1,0,1,1)

df <- data.frame(variable1, variable2, variable3)

获得如下所示的数据帧输出的最简单方法是什么:

   Variable     Total
   Variable1     4
   Variable2     2
   Variable3     3

colsums 有点像让我到达那里,但使用此方法不会将变量名称作为合法列输出。

【问题讨论】:

  • 总结和调整。或者旋转然后总结。

标签: r dplyr


【解决方案1】:
library(dplyr)
library(tidyr)
df %>% 
    pivot_longer(everything()) %>% 
    group_by(name) %>% 
    summarise(Total = sum(value))
# A tibble: 3 × 2
  name      Total
  <chr>     <dbl>
1 variable1     4
2 variable2     2
3 variable3     4

【讨论】:

  • 这是我尝试的第一个答案,它奏效了。谢谢!
【解决方案2】:

这可能是另一种选择:

df %>%
  tibble::rownames_to_column(var = "id") %>%
  janitor::adorn_totals()

    id variable1 variable2 variable3
     1         1         0         1
     2         1         0         0
     3         1         0         1
     4         0         1         0
     5         1         1         1
     6         0         0         1
 Total         4         2         4

【讨论】:

  • 清洁工在日常使用中多次前来救援
【解决方案3】:

你可以试试这个。

variable1 <- c(1,1,1,0,1,0)
variable2 <- c(0,0,0,1,1,0)
variable3 <- c(1,0,1,0,1,1)

df <- data.frame(variable1, variable2, variable3)
> data.frame(Total= colSums(df))
          Total
variable1   4
variable2   2
variable3   4

【讨论】:

    【解决方案4】:
    ## data frame
    variable1 <- c(1,1,1,0,1,0)
    variable2 <- c(0,0,0,1,1,0)
    variable3 <- c(1,0,1,0,1,1)
    
    df <- data.frame(variable1, variable2, variable3)
    df
    
    ##using dplyr Library
    library(dplyr)
    new_df = df %>% summarise(across(variable1:variable3,sum)) # sum of ones in each column
    t(new_df) # transpose new_df to get desired pattern
    

    【讨论】:

    • 欢迎 Sakshi 加入 SO!不鼓励一次又一次地为每个变量输入sum。在这些情况下使用dplyr::across。 :)
    • @AnilGoyal 感谢您提供信息。我已经进行了编辑。
    【解决方案5】:

    使用stack/colSums

    stack(colSums(df))[2:1]
            ind values
    1 variable1      4
    2 variable2      2
    3 variable3      4
    

    【讨论】:

      【解决方案6】:

      还有一种方法可以

      library(tidyverse)
      
      df %>%
        summarise(across(everything(), sum)) %>%
        pivot_longer(everything())
      
      #> # A tibble: 3 x 2
      #>   name      value
      #>   <chr>     <dbl>
      #> 1 variable1     4
      #> 2 variable2     2
      #> 3 variable3     4
      

      reprex package (v2.0.0) 于 2021 年 7 月 29 日创建

      【讨论】:

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