[英]Filter for the datetimes that has gap greater than or equal to a number - R
假設我有一個如下數據框,
ID date difference
1 5/1/2016 4:46 NA
2 5/1/2016 4:55 9
3 5/1/2016 5:01 6
4 5/1/2016 5:09 8
5 5/1/2016 5:16 7
6 5/1/2016 5:24 8
7 5/1/2016 5:31 7
8 5/1/2016 5:40 9
9 5/1/2016 5:46 6
10 5/1/2016 5:49 3
11 5/1/2016 5:54 5
12 5/1/2016 5:57 3
13 5/1/2016 6:10 13
在這里,我想過濾時間差大於或等於9的條目。我想在時差值為9之前過濾兩個條目,然后在它之后過濾一個條目。 基本上,我想分析時間差大於9分鍾的趨勢。 因此,我想在其之前輸入兩個條目,在此之后輸入一個條目,以便針對每個時間段要進行調查的條目分別具有4個條目。
我可以用一個條目直接過濾它,
data %>% filter(difference >= 9)
但我想在此之前進行兩項調查,然后在其之后進行一項調查。 理想情況下,我的輸出應為
ID date difference
1 5/1/2016 4:46 NA
2 5/1/2016 4:55 9
3 5/1/2016 5:01 6
6 5/1/2016 5:24 8
7 5/1/2016 5:31 7
8 5/1/2016 5:40 9
9 5/1/2016 5:46 6
11 5/1/2016 5:54 5
12 5/1/2016 5:57 3
13 5/1/2016 6:10 13
每當時間差大於或等於9時,我在輸入前得到兩個,在輸入后得到一個。
有人可以給我一些想法如何解決這個問題嗎?
謝謝
注意:我在“日期”中使用了一個占位符系列,因為在此代碼的上下文中這無關緊要。
據我所知,沒有一種命令可以完成所需的工作。 我建議循環執行此操作:
df <- data.frame(1:13)
df <- cbind(df,2000:2012,c(NA,9,6,8,7,8,7,9,6,3,5,3,13))
colnames(df) <- c("ID","date","difference")
whichAtLeast9 <- which(df$difference >= 9)
wantedRows <- whichAtLeast9
for (i in whichAtLeast9) {
entries_before <- c(i-1,i-2)
entries_before <- subset(entries_before,entries_before>0)
wantedRows <- append(wantedRows,entries_before)
entries_after <- i+1
entries_after <- subset(entries_after,entries_after<=13)
wantedRows <- append(wantedRows,entries_after)
}
# Remove duplicates and sort.
wantedRows <- sort(unique(wantedRows))
finaldf <- df[wantedRows,]
結果:
> finaldf
ID date difference
1 1 2000 NA
2 2 2001 9
3 3 2002 6
6 6 2005 8
7 7 2006 7
8 8 2007 9
9 9 2008 6
11 11 2010 5
12 12 2011 3
13 13 2012 13
你可以嘗試shift
, Reduce
在法data.table
,假設dt
是你data.frame:
library(data.table)
setDT(dt)
dt[Reduce("|", c(shift(difference >= 9, n = 0:1, type = "lag"),
shift(difference >=9, n = 1:2, type = "lead")))]
ID date difference
1: 5/1/2016 4:46 NA
2: 5/1/2016 4:55 9
3: 5/1/2016 5:01 6
4: 5/1/2016 5:24 8
5: 5/1/2016 5:31 7
6: 5/1/2016 5:40 9
7: 5/1/2016 5:46 6
8: 5/1/2016 5:54 5
9: 5/1/2016 5:57 3
10: 5/1/2016 6:10 13
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.