【发布时间】:2011-05-31 22:26:54
【问题描述】:
我希望你不认为我在寻求关系方面的建议。
很少,我必须为调查对象提供指定事件发生时间的能力。结果是一个非常混乱的字符串,老实说我不知道该怎么处理。超越手动重新编码。
这是一个简短的样本,有数千个:
c("5 月 2 日/中午 12 点", "9:45 am", "11:00 AM AST", "4 月 27 日 / 12:00 AST", “美国东部标准时间上午 11:40”、“2011 年 4 月 25 日”、“2011 年 4 月 12 日 / 8:44”、“2011 年 4 月 12 日 / 8:36am”、 “2011 年 4 月 12 日/上午 8:30”、“2011 年 4 月 12 日/上午 8:18”、“2011 年 4 月 12 日/上午 8:12”、 “2011 年 4 月 11 日 / 下午 5:57”、“2011 年 4 月 11 日 / 下午 5:49”、“2011 年 4 月 11 日 / 下午 5:42”、 “2011 年 4 月 11 日 / 下午 5:36”、“2011 年 4 月 11 日 / 5:27”、“4 月 5 日上午 11:26”、 “8:50”、“4月4日中午12点45分”、“4月4日上午10点左右”、“4月4日上午10点左右”、 “2011 年 3 月 18 日上午 9:33”、“2011 年 3 月 18 日上午 9:27”、“df”、“fg”、“12:16”、 “9:50”、“2011 年 2 月 8 日/下午 12:20”、“2011 年 2 月 4 日上午 8:34”、“2011 年 1 月 31 日下午 2:50”、 “2011 年 1 月 31 日下午 2:45”、“2011 年 1 月 31 日下午 2:38”、“2011 年 1 月 31 日下午 2:26”、 “11h09”、“11:00 am”、“1h02 pm”、“10h03”、“2h10”、“2011 年 1 月 13 日上午 9:50 范”, “2011 年 1 月 12 日”、“2011 年 1 月 12 日下午 3:59”、“1 月 12 日下午 14:19”、 “2011 年 1 月 12 日下午 1:35”、“2011 年 1 月 12 日下午 1:28”、“1h36”、“9h15”、 “9h09”,“8h51”,“8h45”,“8h35”,“1h12pm”,“12h59”,“11h52am”, "10h45", "15h55", "12 月 31 日, 10 日上午 11:11", "12 月 31,10 日上午 10:15", “2010 年 12 月 30 日下午 12:32”、“2010 年 12 月 30 日下午 12:18”、“上午 9:16”、“上午 11 点 16 分”、 "11h12", "9h29 am", "11h38", "2010 年 12 月 16 日", "2010 年 12 月 16 日", "2010 年 12 月 16 日"、"2010 年 12 月 15 日"、"2010 年 12 月 14 日"、"12 月 14 日 11:38"、 “12 月 14 日 11:35”、“12 月 14 日 11:25”、“2010 年 12 月 13 日”、“12 月 10 日下午 1:38”、 “12 月 10 日下午 1:26”、“12 月 10 日下午 1:20”、“12 月 10 日下午 1:12”、“2010 年 12 月 9 日”、 "11h10 am", "10h59 am", "10:50 am", "12 月 7 日星期二, 9:45 Van time", “2010 年 12 月 3 日下午 12:30”、“2010 年 12 月 3 日下午 12:20”、“2010 年 12 月 3 日下午 12:10”、 “2010 年 11 月 30 日下午 4 点”、“2010 年 11 月 30 日”、“11 月 29 日下午 120 点”、 “2010 年 11 月 29 日 11:27”、“2010 年 11 月 29 日上午 10:12”、“2010 年 11 月 26 日下午 1:18”、 “上午 10:56”、“11 月 24 日”、“11 月 24 日/下午 4:20 AST”、“11 月 24 日/4:00 PM AST”、 “11 月 24 日下午 2:10”、“11 月 24 日上午 11:00”、“12:05 MST”、 "3.55PM", "11 月 17 日/2010 年 12:45 pm", "11 月 16/10 日中午 12:00", "11 月 16/10 日 11:50 am", “2010 年 11 月 16 日上午 11:30”,“2010 年 11 月 12 日下午 12:23”,“2010 年 11 月 11 日下午 2:20”, “2010 年 11 月 11 日下午 2:15”、“11 月 11 日下午 2:00”、“11 月 10 日上午 10:22”、 "11 月 8 日...下午 3:19"、"11 月 8 日 1 点;下午 50 点"、"11 月 8 日...中午 12 点"、 “11 月 8 日/10 月 10 日:上午”、“2010 年 11 月 5 日下午 1:10”、“CST 上午 11:32”、 “11 月 4 日 11:10”、“11 月 3 日上午 10 点”、“9:30 上午”、“2010 年 11 月 2 日下午 1:50”、 “2010 年 10 月 29 日下午 2:50”、“10 月 28 日上午 11:20”、“2010 年 10 月 27 日上午 10:40”、“2010 年 10 月 26 日 11:18”、 “10 月 26 日上午 11 点”、“10 月 26 日上午 10:30”、“10 月 26 日 10:50”、“2010 年 10 月 25 日 13:50”、 "2010 年 10 月 22 日 10:15"、"10 年 10 月 22 日上午 10 点"、"2010 年 10 月 21 日下午 3:00"、 "2010 年 10 月 21 日 2:59", "10/21/2010 11:50", "10/21/2010 11:45", “2010 年 10 月 21 日 11:40”、“2010 年 10 月 21 日 11:30”、“11:30”、“10 月 20 日下午 1 点左右”、 "2010 年 10 月 20 日下午 4:50"、"13:48"、"13:45"、"2010 年 10 月 20 日上午 11:45"、 "10 月 19 日下午 3:05", "2010 年 10 月 18 日下午 2:15", "10 月 18 日下午 3:10", “上午 10:30”、“10 月 15 日上午 11:50”、“10 月 14 日上午 11:05”、“10 月 14 日/ 11:06”、 “大西洋时间 10 月 13 日 4:40”,“大西洋时间 10 月 13 日下午 4:05”,“大西洋时间 10 月 13 日 1:45”, "10 月 13 日 / 10:37", "10 月 12 日 3:33", "2010 年 10 月 12 日下午 1:10", "10 月 12 日 / 11:45", “10 月 12 日 / 9:45”、“2010 年 10 月 8 日/ 2:00”、“10 月 8/10- 1145am”、“2010 年 9 月 2 日下午 3.52”、 “2010 年 9 月 2 日上午 10 点 21 分”、“2010 年 9 月 1 日下午 2 点”、“2010 年 9 月 1 日”、“2010 年 8 月 31 日 - 上午 11 点 52 分”、 “8 月 31 日上午 10:40”、“2010 年 8 月 31 日 - 上午 10 点”)通常,这些事件发生在受访者填写调查表的日期附近,但并非总是如此。调查日期以一致的格式自动记录,并且可以使用as.Date 轻松转换为 POSIX,因此,可以忽略仅包含时间的元素并将其与填写调查的日期合并。
非常感谢您的想法。
注意 1:你们中的一些人可能会说,就验证响应而言,您应该做 X、Y 或 Z。对你,我说——地狱是的——下一次。不是我设计的!我只需要处理它。
一些有助于解决问题的事实:
- 时间始终是工作日时间,上午 9 点到下午 6 点(因此上午/下午无关紧要)
- 年份无关紧要,因为我可以将它们从另一个领域拉出来(它永远只会是 2011/2010 年,谢天谢地,这超出了任何表示法的可能时间范围)
- 我不关心时区,因为我知道它们的地理位置
到目前为止我做了什么:
mos <- strsplit('
jan
feb
mar
apr
may
jun
jul
aug
sep
oct
nov
dec
january
february
march
april
may
june
july
august
september
october
november
december
', '\n')[[1]][-1]
days <- strsplit('
mon
tue
wed
thu
fri
sat
sun
monday
tuesday
wednesday
thursday
friday
saturday
sunday
', '\n')[[1]][-1]
## Messy Date Wrangling
x <- ## that hot ghetto mess above
# minimize
x <- tolower(x)
# remove unnecessary crap
x <- sub("2011"," ",x)
x <- sub("2010"," ",x)
x <- sub("am"," ",x)
x <- sub("pm"," ",x)
x <- sub("[p][.][m]"," ",x)
x <- sub("[a][.][m]"," ",x)
x <- sub("[.]{3}"," ",x)
x <- str_trim(x, side="both")
# divide
x <- strsplit(x,c(" "))
# conquer?
lapply(x, function(x) pmatch(x,mos))
lapply(x, function(x) pmatch(x,days))
【问题讨论】:
-
你这个可怜的混蛋。看着那个样本,我嘴里吐了一点。虽然我无法用您的编程语言提供解决方案,但我衷心祝您好运。
-
作为一个调查猴子,我试图给出尽可能完整的答案。我希望你觉得这很有用。
-
可以在
lubridate包中找到更新的解决方案,它在处理混乱的日期方面有一些技巧。
标签: r