[英]R dplyr - check difftime on previous rows
我的數據框如下所示:
dataframe <- read.table(text="
id send paid
1 2013-01-25 NA
2 2013-02-21 2013-02-23
2 2013-02-21 2013-02-25
2 2013-02-21 2013-02-28
3 2013-03-01 2013-03-02
3 2013-03-01 2013-03-03
4 2013-06-23 2013-05-03
", header=TRUE)
我想做的是在dplyr
為每個id
創建新的列結果, dplyr
列結果將對以上行進行計數,其中實際id
發送與該id
上方的paid
日期之間的差小於120天。
換句話說, id
1上面沒有行,所以結果將為0, id
2的result
應該為0,因為上面的值為NA
。 結果為id
3將是3,因為之間差2013-03-01
和( 2013-02-23
, 2013-02-25
, 2013-02-28
)小於120天。 結果為id
4應該是4,因為之間差2013-06-23
是小於120天的日期( 2013-03-03
, 2013-03-02
, 2013-02-28
, 2013-02-25
)。
result <- read.table(text="
id send paid result
1 2013-01-25 NA 0
2 2013-02-21 2013-02-23 0
2 2013-02-21 2013-02-25 0
2 2013-02-21 2013-02-28 0
3 2013-03-01 2013-03-02 3
3 2013-03-01 2013-03-03 3
4 2013-06-23 2013-05-03 4
", header=TRUE)
使用dplyr包可以做到這一點:
library(dplyr)
dataframe$paid <- as.Date(dataframe$paid)
dataframe$send <- as.Date(dataframe$send)
dataframe$id <- as.numeric(dataframe$id)
dataframe$paid-dataframe$send
count_fun<-function(myid){dataframe %>% filter(id<=myid) %>% mutate(diff=abs(paid-last(send))<120)%>% filter(id<myid) %>% summarise(sum(diff, na.rm = T)) %>% pull()}
dataframe$result <- sapply(dataframe$id, count_fun)
id send paid result
1 1 2013-01-25 <NA> 0
2 2 2013-02-21 2013-02-23 0
3 2 2013-02-21 2013-02-25 0
4 2 2013-02-21 2013-02-28 0
5 3 2013-03-01 2013-03-02 3
6 3 2013-03-01 2013-03-03 3
7 4 2013-06-23 2013-05-03 4
說明:第一步,定義一個函數,該函數對小於給定索引(小於120天)的索引行進行計數。 第二步,應用sapply
使用步驟1的功能ID列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.