2017-05-15 18 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))