r - 根据开始年份和结束年份添加列以显示时间段
问题描述
我有一个看起来像这样的 data.table
CUSTOMER_ID START_DATE END_DATE COUNTRY
1 2006-11-10 2010-10-25 USA
2 2006-11-10 2018-09-29 FRANCE
3 2017-08-23 2018-09-29 CHINA
4 2007-01-30 2018-09-29 JAPAN
5 2007-01-30 2018-09-29 COLOMBIA
6 2007-01-30 2017-01-30 BRAZIL
7 2007-01-30 2017-01-30 USA
8 2012-03-15 2018-09-29 USA
9 2012-03-15 2018-09-29 CHINA
10 2006-11-10 2015-11-06 CHINA
有了这些数据,我想做以下事情:
计算两个日期之间的年差
根据计算的年数,我想创建一个新列“PERIOD”,使用 START_DATE 和 END_DATE 列中的开始和结束年份来显示每个客户活跃的每个时期。最终结果应该是这样的:
ID PERIOD COUNTRY 1 2006-2007 USA 1 2007-2008 USA 1 2008-2009 USA 1 2009-2010 USA 2 2006-2007 FRANCE 2 2007-2008 FRANCE 2 2008-2009 FRANCE 2 2009-2010 FRANCE 2 2010-2011 FRANCE 2 2011-2012 FRANCE 2 2012-2013 FRANCE 2 2013-2014 FRANCE 2 2014-2015 FRANCE 2 2015-2016 FRANCE 2 2016-2017 FRANCE 2 2017-2018 FRANCE 3 2017-2018 CHINA 3 2018- CHINA
到目前为止,我已经能够达到上面的第 1 位(计算 START_DATE 和 END_DATE 之间的年差):
date_cols <- c("START_DATE", "END_DATE")
DT[, (date_cols) := lapply(.SD, anytime::anydate), .SDcols = date_cols]
DT[,YEARS_ACTIVE:= ceiling(as.numeric(END_DATE-START_DATE)/365)]
任何帮助深表感谢
解决方案
推荐阅读
- python - Pandas GroupBy 在一列列表中列出值并找到它们的平均值
- matlab - 函数句柄的乘法
- php - 在PHP中将每个具有唯一值的重复名称的二维数组转换为具有多个值的唯一名称的二维数组的最有效方法?
- spring-boot - Spring-boot 项目,使用 Gradle,使用 Kotlin 编码,自动生成 OpenAPI kotlin 类
- javascript - SVG Pattern 不会改变填充颜色
- api - MyOwnFreeHost API 客户区 Infinityfree
- data-science - LightGBM 模型返回相同分数但参数不同
- c# - 没有大括号的“使用”语法在某些机器上有效,而在其他机器上无效 - 为什么?
- aws-lambda - 如何将无服务器应用到现有 Lambda
- nfc - 从 PN532 NFC 获取电话号码