2017-05-15 85 views
-4

如何从天使用data.table

 Variable A days stardate enddate(cumulative) 
      A  2  0   2 
      A  3  2   5 
      B  4  5   9 
      A  3  0   3 
      B  8  3   11 
+0

我猜你想要用实际的日期做到这一点?请确认。 –

+0

你的问题从模糊开始,变得模糊。这是你想要的结果,至少那是我的假设。但是,当您进行第4天(第3行)和第2天(第1行)时,您无法在第1行获得开始日期0。改述你的问题。 –

回答

0

如果我理解正确的开始日期和结束日期(累计),你想要的日子+起始日期是在结束日期列这种情况下创建索引。然后,你可以简单地使用:

df <- data.table(Variable=c("A", "A", "B", "A", "B"), days=c(2,3,4,3,8), startdate=c(0,2,5,9,12), enddate=c(0)) 
df$enddate <- as.numeric(df$days + df$startdate) 
+0

不完全是,只有变量A和天才能得到startdate并且终止 – DFR

+0

@DFR当你有一个字母分类值和一个整数时,你应该如何计算一个数字值或日期时间。你能更彻底地解释一下吗?您问题中的表格是所需的输出或输入?你能通过更新你的问题向我展示你的意思吗? –

+0

我的错误,它总是从A开始,然后以B结尾作为块来计算startdate和enddate – DFR

1

使用的cumsumshift组合:

dt1[, grp := cumsum(shift(Variable, fill='A')=='B') 
    ][, startdate := cumsum(shift(days, fill = 0)), grp 
     ][, enddate := startdate + days][] 

这给:

> dt1 
    Variable days grp startdate enddate 
1:  A 2 0   0  2 
2:  A 3 0   2  5 
3:  B 4 0   5  9 
4:  A 3 1   0  3 
5:  B 8 1   3  11 

使用的数据:

dt1 <- data.table(Variable = c("A","A","B","A","B"), days = c(2,3,4,3,8))