【问题标题】:Calculating Running Balance column计算运行余额列
【发布时间】:2017-06-09 13:30:00
【问题描述】:

我需要有关 R 和以下数据的帮助。对于每个日期,都有一个值(A 列),我需要计算 Balance 列,该列的总和减去 A 列中的每一行值。406 是 A 列的总数。

我目前在 data.table 中有这些数据。

Dates        A        Balance
                      406.00
30/12/2016   100.00   306.00 
31/03/2017   101.00   205.00 
30/06/2017   102.00   103.00 
29/09/2017   103.00   -   

谢谢

【问题讨论】:

标签: r data.table


【解决方案1】:

您可以使用循环并手动进行计算,不包括最后一行。

data <- data.frame(A = c(NA, 100, 101, 102, 103), Balance = c(406, NA, NA, NA, NA))
for (i in 1:(nrow(data) - 1)) {
    data$Balance[i + 1] <- data$Balance[i] - data$A[i + 1]
}

【讨论】:

    【解决方案2】:

    data$Balance &lt;- sum(data$A)-data$A

    您可以通过将所有 A 相加然后减去向量 A 来创建平衡列。

    【讨论】:

      【解决方案3】:

      这应该会为您提供所需的结果

      # Create dataframe
      df <- data.frame(Dates = c("30/12/2016","31/03/2017","30/06/2017","29/09/2017"),
                       A = c(100.00, 101.00, 102.00, 103.00))
      
      # Create empty Balance column
      df$Balance <- NA
      
      # Insert total balance to top of dataframe
      df <- rbind(c(NA,0,sum(df$A)), df)
      
      # Get the running balance
      df$Balance <- sum(df$A) - cumsum(df$A)
      

      【讨论】:

        【解决方案4】:

        我想指出函数cumsum 就是为此而生的。反转数据框后...:

        df <- df[seq( nrow(df), 1 ),]
        df
               Dates     A Balance
               <chr> <dbl>   <chr>
        1 29/09/2017   103       -
        2 30/06/2017   102  103.00
        3 31/03/2017   101  205.00
        4 30/12/2016   100  306.00
        5       <NA>    NA  406.00
        
        cumsum(df$A)
        [1] 103 205 306 406  NA
        

        【讨论】:

          猜你喜欢
          • 2017-04-01
          • 2012-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-11
          • 2021-10-18
          相关资源
          最近更新 更多