Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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和起始日期的数据表,每个唯一ID代表一行。我必须使用变量“COUNT”(本质上是起始日期和结束日期之间的间隔,以月为单位),并按顺序将起始日期复制到日期字段中,如图所示。我尝试的代码只取“COUNT”(在本例中为3)的第一个值,并依次复制ORIG_DATE。不同ID的计数不同。如何对每个唯一ID使用相应的计数,并将原始日期复制到另一个名为DATE的列中 测试数据 ID COUNT SCORE VALUE ORIG_DATE CLOSE_DATE 10748

我有一个带有ID和起始日期的数据表,每个唯一ID代表一行。我必须使用变量“COUNT”(本质上是起始日期和结束日期之间的间隔,以月为单位),并按顺序将起始日期复制到日期字段中,如图所示。我尝试的代码只取“COUNT”(在本例中为3)的第一个值,并依次复制ORIG_DATE。不同ID的计数不同。如何对每个唯一ID使用相应的计数,并将原始日期复制到另一个名为DATE的列中

测试数据

ID  COUNT   SCORE   VALUE   ORIG_DATE   CLOSE_DATE  
10748   3   750 450231  2015-03-01  2015-06-01      
10845   4   680 590231  2015-01-01  2015-05-01      
21758   7   760 650839  2014-11-01  2015-06-01   

test.panel <- test.data[rep(sequence(nrow(test.data)),COUNT)]

test.panel$DATE <- ymd(test.panel$ORIG_DATE)+ months(1:test.panel$COUNT)

使用
data.table
执行此操作实际上很简单。重新创建示例数据:

test.data <- read.table( text = "
ID  COUNT   SCORE   VALUE   ORIG_DATE   CLOSE_DATE  
10748   3   750 450231  2015-03-01  2015-06-01      
10845   4   680 590231  2015-01-01  2015-05-01      
21758   7   760 650839  2014-11-01  2015-06-01", 
                 header = TRUE,
                 stringsAsFactors = FALSE,
                 colClasses = c("integer", "integer", "integer","integer", "Date", "Date") )
str(df)

这是可行的……因此,如果我必须倒写日期,我所需要的就是调整seq()中的=和to=选项,例如seq(2015-03-012013-05-01,by=“month”)……谢谢卡洛斯
test.data <- read.table( text = "
ID  COUNT   SCORE   VALUE   ORIG_DATE   CLOSE_DATE  
10748   3   750 450231  2015-03-01  2015-06-01      
10845   4   680 590231  2015-01-01  2015-05-01      
21758   7   760 650839  2014-11-01  2015-06-01", 
                 header = TRUE,
                 stringsAsFactors = FALSE,
                 colClasses = c("integer", "integer", "integer","integer", "Date", "Date") )
str(df)
library(data.table)
test.data <- data.table(test.data)
test.data[ , list(CLOSE_DATE = seq(ORIG_DATE, CLOSE_DATE, by = "month")), 
   by = c("ID", "COUNT", "SCORE", "VALUE", "ORIG_DATE")]

       ID COUNT SCORE  VALUE  ORIG_DATE CLOSE_DATE
 1: 10748     3   750 450231 2015-03-01 2015-03-01
 2: 10748     3   750 450231 2015-03-01 2015-04-01
 3: 10748     3   750 450231 2015-03-01 2015-05-01
 4: 10748     3   750 450231 2015-03-01 2015-06-01
 5: 10845     4   680 590231 2015-01-01 2015-01-01
 6: 10845     4   680 590231 2015-01-01 2015-02-01
 7: 10845     4   680 590231 2015-01-01 2015-03-01
 8: 10845     4   680 590231 2015-01-01 2015-04-01
 9: 10845     4   680 590231 2015-01-01 2015-05-01
10: 21758     7   760 650839 2014-11-01 2014-11-01
11: 21758     7   760 650839 2014-11-01 2014-12-01
12: 21758     7   760 650839 2014-11-01 2015-01-01
13: 21758     7   760 650839 2014-11-01 2015-02-01
14: 21758     7   760 650839 2014-11-01 2015-03-01
15: 21758     7   760 650839 2014-11-01 2015-04-01
16: 21758     7   760 650839 2014-11-01 2015-05-01
17: 21758     7   760 650839 2014-11-01 2015-06-01