首页 > 解决方案 > 我应该如何将累积数据表转换为 R 中的当前值?

问题描述

我有一个只提供累积值的长数据表。添加具有当前值的另一列的最佳方法是什么?这是一个简短的数据表,您可以将其用作示例:

   ContractID       Date  Cum_Sum_1M
1:          1 2018-02-01             10
2:          1 2018-02-20             30
3:          1 2018-03-12             50
4:          2 2018-02-01             10
5:          2 2018-02-12             30

标签: rdataframe

解决方案


使用 和 向量尝试此解决方案,diff()以便在累积和之前获取值。这里的代码:

#Code
df$Var <- c(df$Cum_Sum_1M[1],diff(df$Cum_Sum_1M))
df$CumVar2 <- cumsum(df$Var)

输出:

   ContractID       Date Cum_Sum_1M Var CumVar2
1:          1 2018-02-01         10  10      10
2:          1 2018-02-20         30  20      30
3:          1 2018-03-12         50  20      50
4:          2 2018-02-01         10 -40      10
5:          2 2018-02-12         30  20      30

使用的一些数据:

#Data
df <- structure(list(ContractID = c(1L, 1L, 1L, 2L, 2L), Date = c("2018-02-01", 
"2018-02-20", "2018-03-12", "2018-02-01", "2018-02-12"), Cum_Sum_1M = c(10L, 
30L, 50L, 10L, 30L)), row.names = c("1:", "2:", "3:", "4:", "5:"
), class = "data.frame")

此外,如果需要分组操作,我们可以使用dplyr

library(dplyr)
#Code
df %>% group_by(ContractID) %>%
    mutate(NewVar=c(Cum_Sum_1M[1],diff(Cum_Sum_1M)))

输出:

# A tibble: 5 x 4
# Groups:   ContractID [2]
  ContractID Date       Cum_Sum_1M NewVar
       <int> <chr>           <int>  <int>
1          1 2018-02-01         10     10
2          1 2018-02-20         30     20
3          1 2018-03-12         50     20
4          2 2018-02-01         10     10
5          2 2018-02-12         30     20

推荐阅读