我想从R中的字符串(从数据库导入)中提取一些时间信息(持续时间),并且需要一些关于如何处理此任务的帮助。问题是我想要处理数据库中有数千个持续时间,但它们的格式各不相同。
例如,
字符串
48小时
如您所见,它们因格式而异,有些具有范围,有些具有精确的持续时间,有些具有分隔数字和字母的空格。理想情况下,这些将处理为具有范围的两列,然后是可以计算总持续时间的第三列。
那么,上述数据点的结果将是:
日;日
1; 1
我想我可能需要一个提取数字并查找关键词的正则表达式。如果单词" hour"被发现,转换为天。如果找到破折号,请找到破折号前后的数字以及关键字"小时/天"。这看起来像是一团糟,但想看看是否有人有想法让我的生活更轻松。
谢谢!
答案 0 :(得分:1)
提取时间,按-
拆分,将它们与小时或天数相匹配,转换回天数:
# 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] 2