【问题标题】:sum up multiple rows by condition in R [duplicate]在R中按条件总结多行[重复]
【发布时间】:2020-12-16 09:59:05
【问题描述】:

我知道有很多类似的问题关于如何在 R 中的条件下总结一列。但我无法在我的数据中实现函数 aggregatedplyr::group_by(df) %>% summarise(variable = sum(variable))Combine rows and sum their values 也对我没有帮助。但也许你可以? 我想在 R 中合并和总结 data.frame 的行。

df <- data.frame(file=c('sample1','sample1','sample2','sample3','sample2'),gene1=c(34,365,76,0,4),gene2=c(34,0,0,456,0))
> df
     file gene1 gene2
1 sample1    34    34
2 sample1   365     0
3 sample2    76     0
4 sample3     0   456
5 sample2    4      0

输出应该是这样的

 file gene1 gene2
1 sample1    399    34
2 sample2    80     0
3 sample3     0   456

【问题讨论】:

    标签: r dataframe merge sum rows


    【解决方案1】:

    base中,您可以使用rowsum按组汇总行

    rowsum(df[-1], df[,1])
    #        gene1 gene2
    #sample1   399    34
    #sample2    80     0
    #sample3     0   456
    

    或者使用aggregate:

    aggregate(.~file, df, sum)
    #     file gene1 gene2
    #1 sample1   399    34
    #2 sample2    80     0
    #3 sample3     0   456
    

    或者使用by:

    do.call(rbind, by(df[-1], df[,1], colSums))
    #        gene1 gene2
    #sample1   399    34
    #sample2    80     0
    #sample3     0   456
    

    【讨论】:

      【解决方案2】:

      你可以用dplyr试试这个

      df %>% 
        group_by(file) %>% 
        summarise(gene1 = sum(gene1), gene2 = sum(gene2))
      

      data.table

      setDT(df)[,.(gene1 = sum(gene1), gene2 = sum(gene2)), by= .(file)]
            file gene1 gene2
      1: sample1   399    34
      2: sample2    80     0
      3: sample3     0   456
      

      【讨论】:

        【解决方案3】:

        dplyr 方法是:

        library(dplyr)
        
        df %>% group_by(file) %>% summarise_all(.funs = sum,na.rm=T)
        

        输出:

        # A tibble: 3 x 3
          file    gene1 gene2
          <fct>   <dbl> <dbl>
        1 sample1   399    34
        2 sample2    80     0
        3 sample3     0   456
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-18
          • 2019-07-25
          • 2021-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多