在R中选择具有时间的行

时间:2018-05-01 15:16:11

标签: r dataframe time

我有一个如下所示的数据框:

Subject  Time  Freq1  Freq2 ...
  A      6:20    0.6    0.1
  A      6:30    0.1    0.5
  A      6:40    0.6    0.1
  A      6:50    0.6    0.1
  A      7:00    0.3    0.4
  A      7:10    0.1    0.5
  A      7:20    0.1    0.5
  B      6:00    ...    ...

我需要删除7:00到7:30之间的时间范围内的行。所以在这种情况下,所有6:00,6:10,6:20 ......

我尝试创建一个数据框只有我想要保留的时间,但我似乎并不认为时间是一个数字,也不是一个名字。当我试图直接删除我不需要的那些时,我得到了同样的错误。它可能很简单,但我没有找到任何解决方案。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我们可以将time列转换为包下的Period类,然后根据该列过滤数据框。

library(dplyr)
library(lubridate)

dat2 <- dat %>%
  mutate(HM = hm(Time)) %>%
  filter(HM < hm("7:00") | HM > hm("7:30")) %>%
  select(-HM)
dat2
#   Subject Time Freq1 Freq2
# 1       A 6:20   0.6   0.1
# 2       A 6:30   0.1   0.5
# 3       A 6:40   0.6   0.1
# 4       A 6:50   0.6   0.1
# 5       B 6:00    NA    NA

数据

dat <- read.table(text = "Subject  Time  Freq1  Freq2
  A      '6:20'    0.6    0.1
                  A      '6:30'    0.1    0.5
                  A      '6:40'    0.6    0.1
                  A      '6:50'    0.6    0.1
                  A      '7:00'    0.3    0.4
                  A      '7:10'    0.1    0.5
                  A      '7:20'    0.1    0.5
                  B      '6:00'    NA     NA",
                  header = TRUE)