Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R Id和代码组合的最早日期_R - Fatal编程技术网

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>