我想从R中的字符串(从数据库导入)中提取一些时间信息(持续时间),并需要一些关于如何处理这个任务的帮助。问题是,在我想要处理的数据库中有数千个持续时间,但它们的格式不同。例如,
字符串
正如您所看到的,它们的格式各不相同,有些有范围,有些有精确的持续时间,还有一些有分隔数字和字母的空格。理想情况下,这些数据将被处理成两列,包含一个范围,然后是第三列,我可以计算出总持续时间。因此,上述数据点的结果如下:
日;日
我想我可能需要一个提取数字和寻找关键词的regexp。如果找到“小时”一词,请将其转换为“天”。如果找到破折号,请在破折号前后找到数字以及关键字“小时/日”。这似乎是一个混乱的工作,但想看看是否有人有想法,使我的生活更容易。
谢谢!
发布于 2015-09-03 03:38:50
提取时间,用-拆分它们,将它们与小时或日单位相匹配,转换为天:
# recreate your data:
x <- c("1 day", "23 hours", "3-5days", "7-10 days", "48 hours ")
# identify if hours or days
per <- c("days","hours")[max.col(sapply(c("day","hour"),grepl,x))]
# get the range of values as numeric data
vals <- lapply(strsplit(regmatches(x, regexpr("(\\d+|\\d+-\\d+)",x)),"-"),as.numeric)
# convert to difftime objects and re-format
lapply(Map(as.difftime, vals, units=per), as.numeric, units="days")
#[[1]]
#[1] 1
#
#[[2]]
#[1] 0.9583333
#
#[[3]]
#[1] 3 5
#
#[[4]]
#[1] 7 10
#
#[[5]]
#[1] 2https://stackoverflow.com/questions/32365868
复制相似问题