删除包含特定小时:分钟的日期的所有行

时间:2017-08-22 19:13:08

标签: r dataframe dplyr lubridate grepl

我的数据框中包含一个包含%d/%m/%Y %H:%M格式日期的列,并希望删除包含时间12:00的所有行,而不管月,日和年。对于名为df且名为date的日期列的数据框,我尝试运行以下代码但不起作用:

df <- df %>% filter(!grepl("12:00", date))

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:3)

为了在下面的示例中更清楚,我将 tstamp 粘贴为字符串,然后解析它。 (这些数据实际上是拍摄时钟的分钟数,但我们可以忽略这个例子并假装它们是小时和分钟)。

然后使用hour(...) == 12按小时提取和过滤,minute(...) == 0按分钟提取和过滤。

library(dplyr)
library(lubridate)

lakers %>%   
  select(date, time, opponent, team, player) %>% 
  mutate(tstamp = paste(date, time),
         tstamp.parsed = ymd_hm(tstamp)) %>% 
  filter(hour(tstamp.parsed) == 12, minute(tstamp.parsed) == 0) %>% 
  head
# A tibble: 6 x 7
      date  time opponent  team player         tstamp       tstamp.parsed
     <int> <chr>    <chr> <chr>  <chr>          <chr>              <dttm>
1 20081028 12:00      POR   OFF        20081028 12:00 2008-10-28 12:00:00
2 20081029 12:00      LAC   OFF        20081029 12:00 2008-10-29 12:00:00
3 20081101 12:00      DEN   OFF        20081101 12:00 2008-11-01 12:00:00
4 20081105 12:00      LAC   OFF        20081105 12:00 2008-11-05 12:00:00
5 20081109 12:00      HOU   OFF        20081109 12:00 2008-11-09 12:00:00
6 20081111 12:00      DAL   OFF        20081111 12:00 2008-11-11 12:00:00