2017-10-10 75 views
0

问题:过滤数据帧按时间段和id中的R

我试图通过依赖于一个ID矢量特定日期时间来过滤我的数据帧。

具体而言,对于观察其中df$id == "A",我想要删除2017-08-05 00:20:002017-08-10 13:55:00之间的行。但是,对于观察其中df$id == "B",我想删除不同时间间隔的行,2017-08-05 00:30:002017-08-10 13:55:00

实例数据框:

date <- as.POSIXct(c("2017-08-04 16:40:00","2017-08-05 00:20:00","2017-08-10 13:55:00","2017-08-15 08:35:00", "2017-08-04 17:20:00","2017-08-05 00:30:00","2017-08-10 13:55:00","2017-08-15 09:30:00"), format = "%Y-%m-%d %H:%M:%S") 
value <- as.numeric(c(1, 2, 3, 4, 1, 2, 3, 4)) 
id <- as.factor(c("A","A","A","A","B","B","B","B")) 
df <- data.frame(date, value, id) 

所需的输出:

   date value id 
2017-08-04 16:40:00  1 A 
2017-08-15 08:35:00  4 A 
2017-08-04 17:20:00  1 B 
2017-08-15 09:30:00  4 B 

谢谢!

编辑:,如果你的数据框有要在整体保持第三类(df$id == "C"):

df[which(
    (df$id == "A" & (df$date < "2017-08-05 00:20:00" | df$date > "2017-08-10 13:55:00")) | 
    (df$id == "B" & (df$date < "2017-08-05 00:30:00" | df$date > "2017-08-10 13:55:00")) 
| df$id == "C"), ] 

回答

2
df[which(
     (df$id == "A" & (df$date < "2017-08-05 00:20:00" | df$date > "2017-08-10 13:55:00")) | 
     (df$id == "B" & (df$date < "2017-08-05 00:30:00" | df$date > "2017-08-10 13:55:00")) 
    ), ] 
+0

谢谢!这非常接近,但'df $ id ==“B”'中的第一个日期应该是'2017-08-05 00:30:00'而不是'2017-08-04 17:20:00'。 – spacedSparking

+0

真棒,感谢您的帮助! – spacedSparking

+0

这个解决方案适用于我的例子,但并不完全符合我的实际数据。如果你想为'A'和'B'应用相同的日期过滤器,你会怎么做,但是你想保留所有的不同id的数据,比如'df $ id ==“C”'? – spacedSparking