R Id和代码组合的最早日期
我有一个如下所示的数据集R Id和代码组合的最早日期,r,R,我有一个如下所示的数据集 Id Date Code 1232 2011-05-27 NFS 1323 2012-02-12 NFS 1355 2009-12-11 CSX 1221 2011-10-17 WBT 1232 2004-06-05 CSX 1355 2007-08-15 CSX 目标是创建三个日期列,每个代码一个{Early_NFS_date
Id Date Code
1232 2011-05-27 NFS
1323 2012-02-12 NFS
1355 2009-12-11 CSX
1221 2011-10-17 WBT
1232 2004-06-05 CSX
1355 2007-08-15 CSX
目标是创建三个日期列,每个代码一个{Early_NFS_date,Early_CSX_date,Early_WBT_date}。这些日期列应存储每个Id和代码组合的最早/最小日期,例如:
ID1232包含两个代码NFS和CSX。ID 1232和代码NFS的最早日期为2011-05-27,因此“早到NFS”列应包含日期2011-05-27
ID 1232和代码CSX的最早日期为2004-06-05,因此早期CSX日期列应包含日期2004-06-05
Id 1355仅包含一个代码CSX,Id 1355和代码CSX的最早日期为2007-08-15,因此“最早日期”列应包含日期2007-08-15…以此类推
输出如下所示
Id Date Code Early_NFS_DATE Early_CSX_DATE Early_WBT_DATE
1232 2011-05-27 NFS 2011-05-27 2004-06-05 .
1323 2012-02-12 NFS 2012-02-12 . .
1355 2009-12-11 CSX . 2007-08-15 .
1221 2011-10-17 WBT . . 2011-10-17
1232 2004-06-05 CSX 2011-05-27 2004-06-05 .
1355 2007-08-15 CSX . 2007-08-15 .
需要帮助执行此操作。您可以执行此操作,例如:
library(reshape2)
library(data.table)
dx$Date <- as.Date(dx$Date)
dx_w <- dcast(dx,Code+Id~Code,
function(x) {if (length(x)>0) min(x) else NA_real_},value.var="Date")
setDT(dx_w)[,lapply(.SD,as.Date,origin="1970-01-01"),"Id,Code"]
# Id Code CSX NFS WBT
# 1: 1232 CSX 2004-06-05 <NA> <NA>
# 2: 1355 CSX 2007-08-15 <NA> <NA>
# 3: 1232 NFS <NA> 2011-05-27 <NA>
# 4: 1323 NFS <NA> 2012-02-12 <NA>
# 5: 1221 WBT <NA> <NA> 2011-10-17
您好,您的输出不清楚,因为您说过,但是
Early\u NFS\u DATE
和Early\u CSX\u DATE
包含与code
列不对应的日期,那么有什么意义呢?@Arun感谢您的编辑。当我尝试在widows上编写代码时,我在frankv(dat,cols=cols,ties.method=“dense”)中得到了这个错误:内部错误:frankv的ties.method()无效。。在我的会话信息中,我有:R版本3.1.2(2014-10-31)-平台:x86\u 64-w64-mingw32/x64(64位)-其他附加包:[1]数据。表1.9.5
在发布我的最后一条评论之前,我刚刚更新了我的数据。表版本。使用install\u github(“Rdatatable/data.table”,build\u vignettes=FALSE)
。所以我想我已经有了最后的承诺。也许我应该更新我的R版本?嗯。。奇怪。可能先卸载,然后重新安装并重试(这在某些情况下修复了此问题)。。。我不认为R版本应该是相关的。@Arun这并没有解决问题。即使对于vignette代码,当我测试时,谢谢。我也会在Windows上测试。我已经修复了Windows用户的一些错误报告,但这个报告从未出现过。。。注意:不要加载重塑2
。如果是,则在加载data.table
之前加载它。
require(data.table) # v 1.9.5
setDT(dx)[, Date := as.Date(Date)]
dcast(dx, Id + Code ~ Code, fun=min, fill=NA, value.var="Date")
# Id Code CSX NFS WBT
# 1: 1221 WBT <NA> <NA> 2011-10-17
# 2: 1232 CSX 2004-06-05 <NA> <NA>
# 3: 1232 NFS <NA> 2011-05-27 <NA>
# 4: 1323 NFS <NA> 2012-02-12 <NA>
# 5: 1355 CSX 2007-08-15 <NA> <NA>