r - 我应该如何将累积数据表转换为 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
解决方案
使用 和 向量尝试此解决方案,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
推荐阅读
- firebase - 从firebase中的文件导入环境变量
- c - 分配堆内存以返回调用函数
- javascript - javascript验证通配符和文本框的空格
- java - 在 Eclipse Project Facets 中不能同时选择动态 web 模块和 Ejb
- java - 为什么扫描仪在 Java 中无法正常工作?
- oauth - 雅虎希望 OAuth 使用什么范围 ID?
- sql - 子查询中的分组依据
- php - 使用 Bootstrap Treeview Ajax JQuery 和 PHP 制作 Treeview
- excel - 使用 VBA 删除 Excel 中的空行
- mongodb - mongo DB 非法语法