首页 > 解决方案 > 如何在 R 中按多个日期过滤多个因子级别?

问题描述

我有多个分组变量(id),我想用自己的特定日期过滤每个变量。

mydata <- structure(list(ID = structure(c("A", "A", "A", "B", "B", "B", "C", "C", "C")), 
    Start = structure(c(1357038060, 1357221074, 1357369644, 1357834170, 
    1357913412, 1358151763, 1358691675, 1358789411, 1359538400
    ), class = c("POSIXct", "POSIXt"), tzone = ""), End = structure(c(1357110430, 
    1357365312, 1357564413, 1358230679, 1357978810, 1358674600, 
    1358853933, 1359531923, 1359568151), class = c("POSIXct", 
    "POSIXt"), tzone = "")), .Names = c("Line", "Start", "End"), row.names = c(NA, -9L), class = "data.frame")

我可以使用以下方法单独完成,但我如何将它们组合成一条线?

mydata %>% filter(id == "A" & time >= as.Date("2013-01-01 00:00:00")) 
mydata %>% filter(id == "B" & time >= as.Date("2013-01-13 00:00:00")) 
mydata %>% filter(id == "C" & time >= as.Date("2013-01-23 00:00:00")) 

标签: rdplyr

解决方案


如果有很多日期,那么可以使用循环

library(dplyr)
library(purrr)
v1 <- unique(mydata$Line)
dates <- as.POSIXct(c("2013-01-01", "2013-01-13", "2013-01-23"))
mydata %>% 
    filter(map2(v1, dates, ~ Line== .x & Start >= .y) %>%
             reduce(`|`))

推荐阅读