【问题标题】:Calculating cumulative sum of columns with loop使用循环计算列的累积和
【发布时间】:2023-01-18 09:32:14
【问题描述】:

我有一个按泳道(列)包含基因表达数据的数据框。我想做的是编写一个循环,它获取每一行的总和,但每次都逐渐添加到另一列中。因此,每次循环时,我都会在数据框中添加另一列,其中包含每行的总和以及数据框末尾的另一列。在下面的示例中,我手动使用 apply() 函数完成了此操作,但这非常低效并且对于大型数据集不可行。我弄乱了 cumsum() 函数,但似乎无法让它为此工作。很可能我错过了一些明显的东西,但任何指导都会很棒!

#示例数据框

c1 <- c('G1', 'G2', 'G3')
c2 <- c(5, 3, 1)
c3 <- c(3, 7, 1)
c4 <- c(6, 3, 4)
c5 <- c(6, 4, 3)
df <- data.frame(c1, c2, c3, c4, c5)

#Cal cumulative sums
sum.2.3 <- apply(df[,2:3],1,sum)
sum.2.4 <- apply(df[,2:4],1,sum)
sum.2.5 <- apply(df[,2:5],1,sum)

df <- cbind(df, sum.2.3, sum.2.4, sum.2.5)

【问题讨论】:

    标签: r loops cumulative-sum


    【解决方案1】:

    您可以同时使用dplyr 包中的mutate 函数和rowSums 基本函数。

    library(dplyr)
    
    c1 <- c('G1', 'G2', 'G3')
    c2 <- c(5, 3, 1)
    c3 <- c(3, 7, 1)
    c4 <- c(6, 3, 4)
    c5 <- c(6, 4, 3)
    df <- data.frame(c1, c2, c3, c4, c5)
    
    df <- df %>% 
      dplyr::mutate(sum.2.3 = rowSums(across(c2:c3)),
                    sum.2.4 = rowSums(across(c2:c4)),
                    sum.2.5 = rowSums(across(c2:c5)))
    

    结果

      c1 c2 c3 c4 c5 sum.2.3 sum.2.4 sum.2.5
    1 G1  5  3  6  6       8      14      20
    2 G2  3  7  3  4      10      13      17
    3 G3  1  1  4  3       2       6       9
    

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2020-12-17
      • 2020-11-04
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      相关资源
      最近更新 更多