如何从R中的字符串列中提取时间间隔?

时间:2018-02-11 14:20:06

标签: r string time intervals lubridate

The column from a Data Frame I am operating on looks like this.

这也是数据的输出结果:

x=c("Wed: 9:00 AM-1:00 PM;", "Sat: 9:00 AM-1:00 PM;", NA, "Wed: 3:00 PM-6:00 PM;Sat: 8:00 AM-1:00 PM;", 
"Tue:8:00 am - 5:00 pm;Sat:8:00 am - 8:00 pm;", "Tue: 3:30 PM-6:30 PM;", 
"Tue: 10:00 AM-7:00 PM;", "Fri: 8:00 AM-11:00 AM;", "Sat: 9:00 AM-1:00 PM;", 
"Sat: 9:00 AM-1:00 PM;", "Wed: 2:30 PM-6:30 PM;", "Tue: 8:00 AM-6:00 PM;", 
"Wed:3:00 pm - 7:00 pm;", "Thu: 3:00 PM-6:30 PM;", "Thu: 3:00 PM-7:00 PM;", 
"Sat: 8:00 AM-11:00 AM;", "Sat: 8:00 AM-12:00 PM;", "Sat: 8:30 AM-1:00 PM;", 
"Wed: 11:00 AM-6:00 PM;Thu: 11:00 AM-6:00 PM;Fri: 11:00 AM-6:00 PM;Sat: 11:00 AM-6:00 PM;", 
"Fri: 7:30 AM-12:00 PM;", "Tue: 2:00 PM-6:00 PM;", "Sat: 8:30 AM-2:00 PM;", 
"Sun: 9:00 AM-1:00 PM;", "Wed: 1:00 PM-5:00 PM;", "Tue: 2:00 PM-6:00 PM;", 
"Thu: 3:30 PM-6:30 PM;", "Thu: 11:00 AM-3:00 PM;Fri: 11:00 AM-3:00 PM;Sat: 8:00 AM-3:00 PM;", 
"Sat: 8:00 AM-2:00 PM;", "Sun: 9:00 AM-1:00 PM;", "Sun: 10:00 AM-2:00 PM;", 
"Sat: 7:00 AM-12:00 PM;", "Thu: 2:00 PM-6:00 PM;", "Thu: 4:00 PM-6:30 PM;", 
"Thu: 4:00 PM-9:00 PM;", "Sat:8:30 AM - 1:30 PM;", "Tue: 3:00 PM-7:00 PM;", 
"Tue: 1:00 PM-5:00 PM;", NA, NA, "Wed: 1:00 PM-5:00 PM;", "Wed: 8:00 AM-5:00 PM;Sat: 8:00 AM-5:00 PM;")

我想知道哪些公司在下午2点之前关闭,哪些公司每天开放时间不到4小时。对于一周内营业时间不同的公司,我想使用他们实际开放日的平均开放时间长度。

我是R的新手,并且无法为这个问题做出很多努力。感谢所提供的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

data.frame(company=paste0("company",seq_along(x)),x,stringsAsFactors = F)%>%
  unnest_tokens(word, x, token = strsplit, split= ";",)%>%
  separate(word,c("day","open_time","close_time"),"(?<=[a-z]):|-")%>%
  mutate(duration=strptime(close_time,"%I:%M %p")-strptime(open_time,"%I:%M %p"),
         durinterval=duration<4,
         closeearlierthan2=as.numeric(format(strptime(close_time,"%I:%M %p"),"%H"))<14)
 company  day open_time close_time   duration durinterval closeearlierthan2
1   company1  wed   9:00 am    1:00 pm  4.0 hours       FALSE              TRUE
2   company2  sat   9:00 am    1:00 pm  4.0 hours       FALSE              TRUE
3   company3 <NA>      <NA>       <NA>   NA hours          NA                NA
4   company4  wed   3:00 pm    6:00 pm  3.0 hours        TRUE             FALSE
5   company4  sat   8:00 am    1:00 pm  5.0 hours       FALSE              TRUE
6   company5  tue  8:00 am     5:00 pm  9.0 hours       FALSE             FALSE
7   company5  sat  8:00 am     8:00 pm 12.0 hours       FALSE             FALSE
8   company6  tue   3:30 pm    6:30 pm  3.0 hours        TRUE             FALSE
9   company7  tue  10:00 am    7:00 pm  9.0 hours       FALSE             FALSE
10  company8  fri   8:00 am   11:00 am  3.0 hours        TRUE              TRUE
11  company9  sat   9:00 am    1:00 pm  4.0 hours       FALSE              TRUE
12 company10  sat   9:00 am    1:00 pm  4.0 hours       FALSE              TRUE
13 company11  wed   2:30 pm    6:30 pm  4.0 hours       FALSE             FALSE
14 company12  tue   8:00 am    6:00 pm 10.0 hours       FALSE             FALSE
15 company13  wed  3:00 pm     7:00 pm  4.0 hours       FALSE             FALSE
16 company14  thu   3:00 pm    6:30 pm  3.5 hours        TRUE             FALSE
17 company15  thu   3:00 pm    7:00 pm  4.0 hours       FALSE             FALSE
18 company16  sat   8:00 am   11:00 am  3.0 hours        TRUE              TRUE
19 company17  sat   8:00 am   12:00 pm  4.0 hours       FALSE              TRUE
20 company18  sat   8:30 am    1:00 pm  4.5 hours       FALSE              TRUE
21 company19  wed  11:00 am    6:00 pm  7.0 hours       FALSE             FALSE
22 company19  thu  11:00 am    6:00 pm  7.0 hours       FALSE             FALSE
23 company19  fri  11:00 am    6:00 pm  7.0 hours       FALSE             FALSE
24 company19  sat  11:00 am    6:00 pm  7.0 hours       FALSE             FALSE
25 company20  fri   7:30 am   12:00 pm  4.5 hours       FALSE              TRUE
26 company21  tue   2:00 pm    6:00 pm  4.0 hours       FALSE             FALSE
27 company22  sat   8:30 am    2:00 pm  5.5 hours       FALSE             FALSE
28 company23  sun   9:00 am    1:00 pm  4.0 hours       FALSE              TRUE
29 company24  wed   1:00 pm    5:00 pm  4.0 hours       FALSE             FALSE
30 company25  tue   2:00 pm    6:00 pm  4.0 hours       FALSE             FALSE
31 company26  thu   3:30 pm    6:30 pm  3.0 hours        TRUE             FALSE
32 company27  thu  11:00 am    3:00 pm  4.0 hours       FALSE             FALSE
33 company27  fri  11:00 am    3:00 pm  4.0 hours       FALSE             FALSE
34 company27  sat   8:00 am    3:00 pm  7.0 hours       FALSE             FALSE
35 company28  sat   8:00 am    2:00 pm  6.0 hours       FALSE             FALSE
36 company29  sun   9:00 am    1:00 pm  4.0 hours       FALSE              TRUE
37 company30  sun  10:00 am    2:00 pm  4.0 hours       FALSE             FALSE
38 company31  sat   7:00 am   12:00 pm  5.0 hours       FALSE              TRUE
39 company32  thu   2:00 pm    6:00 pm  4.0 hours       FALSE             FALSE
40 company33  thu   4:00 pm    6:30 pm  2.5 hours        TRUE             FALSE
41 company34  thu   4:00 pm    9:00 pm  5.0 hours       FALSE             FALSE
42 company35  sat  8:30 am     1:30 pm  5.0 hours       FALSE              TRUE
43 company36  tue   3:00 pm    7:00 pm  4.0 hours       FALSE             FALSE
44 company37  tue   1:00 pm    5:00 pm  4.0 hours       FALSE             FALSE
45 company38 <NA>      <NA>       <NA>   NA hours          NA                NA
46 company39 <NA>      <NA>       <NA>   NA hours          NA                NA
47 company40  wed   1:00 pm    5:00 pm  4.0 hours       FALSE             FALSE
48 company41  wed   8:00 am    5:00 pm  9.0 hours       FALSE             FALSE
49 company41  sat   8:00 am    5:00 pm  9.0 hours       FALSE             FALSE