首页 > 解决方案 > 在R中选择有时间的行

问题描述

我有一个看起来像这样的数据框:

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 ......

我曾尝试创建一个仅包含我想保留的时间的数据框,但我似乎没有将时间识别为数字或名称。当我尝试直接删除我不需要的那些时,我得到了同样的错误。这可能很简单,但我还没有找到任何解决方案。

有什么建议么?

标签: rdataframetime

解决方案


我们可以将该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)

推荐阅读