2016-05-04 112 views
0

分組,我有以下的數據幀:減去連續行由ID

id  day   total_amount 
1  2015-07-09   1000 
1  2015-10-22   100 
1  2015-11-12   200 
1  2015-11-27   2392 
1  2015-12-16   123 
6  2015-07-09   200 
7  2015-07-09   1000 
7  2015-08-27  100018 
7  2015-11-25   1000 
8  2015-08-27   1000 
8  2015-12-07  10000 
8  2016-01-18   796 
8  2016-03-31  10000 
15  2015-09-10   1500 
15  2015-09-30   1000 

我需要的,如果他們有相同的ID來減去天塔每兩個連續的時間,直到達到了最後一排ID然後開始一天中減去列次這次爲新的ID,類似於以下的輸出線東西預計:

7 2015-07-09   1000 2015-08-27 - 2015-07-09 
7 2015-08-27  100018 2015-07-09 - 2015-08-27 
7 2015-07-09   1000   0 
8 2015-08-27   1000 2015-12-07 - 2015-08-27 
8 2015-12-07  10000 2016-01-18 - 2015-12-07 
8 2016-01-18   796 2016-03-31 - 2016-01-18 
8 2016-03-31  10000   0 
15 2015-09-10   1000 2015-09-30 - 2015-09-10 
15 2015-09-30   1000 2015-10-01 - 2015-09-30 
15 2015-10-01   1000 
+1

閱讀有關[dplyr:超前和滯後(HTTPS://cran.r-project。 org/web/packages/dplyr/vignettes/window-functions.html) – zx8754

+0

您希望輸出的格式是? – DatamineR

回答

1

爲了得到差的天數,你可以嘗試:

library(dplyr) 
group_by(df, id) %>% mutate(new = as.Date(lead(day)) - as.Date(day)) 
Source: local data frame [15 x 4] 
Groups: id [5] 

     id  day total_amount  new 
    (int)  (fctr)  (int) (dfft) 
1  1 2015-07-09   1000 105 days 
2  1 2015-10-22   100 21 days 
3  1 2015-11-12   200 15 days 
4  1 2015-11-27   2392 19 days 
5  1 2015-12-16   123 NA days 
6  6 2015-07-09   200 NA days 
7  7 2015-07-09   1000 49 days 
8  7 2015-08-27  100018 90 days 
9  7 2015-11-25   1000 NA days 
10  8 2015-08-27   1000 102 days 
11  8 2015-12-07  10000 42 days 
12  8 2016-01-18   796 73 days 
13  8 2016-03-31  10000 NA days 
14 15 2015-09-10   1500 20 days 
15 15 2015-09-30   1000 NA days 

EDITED

要減去從當前日期的最後一天,你可以使用:

# First save the above result as `df1`: 
df1[is.na(df1["new"]), "new"] <- as.Date(unlist(df1[is.na(df1["new"]), "day"])) 
    - Sys.Date() 
+0

如果我想從當前時間中減去最後一行ID中的時間,該怎麼辦?例如,而不是第5行中的NA,放(當前時間 - 2015-12-16)? – sanaz

+0

@sanaz對不起,我不太明白你的意思。如果你從最後一次減去自己,你會得到0,因爲相同日期之間的差異爲零.... – DatamineR

+0

不是從本身減去,而是從當前時間減去,例如如果今天是2016-05.10第5行,我想減(2016-05-10) - (2015-12-16) – sanaz