首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从r中的字符串中提取时间

从r中的字符串中提取时间
EN

Stack Overflow用户
提问于 2015-09-03 02:05:27
回答 1查看 501关注 0票数 1

我想从R中的字符串(从数据库导入)中提取一些时间信息(持续时间),并需要一些关于如何处理这个任务的帮助。问题是,在我想要处理的数据库中有数千个持续时间,但它们的格式不同。例如,

字符串

  • 1天
  • 23小时
  • 3-5天
  • 7-10天
  • 48小时

正如您所看到的,它们的格式各不相同,有些有范围,有些有精确的持续时间,还有一些有分隔数字和字母的空格。理想情况下,这些数据将被处理成两列,包含一个范围,然后是第三列,我可以计算出总持续时间。因此,上述数据点的结果如下:

日;日

  • 1;1
  • .958;.958
  • 3;5
  • 7;10
  • 2;2

我想我可能需要一个提取数字和寻找关键词的regexp。如果找到“小时”一词,请将其转换为“天”。如果找到破折号,请在破折号前后找到数字以及关键字“小时/日”。这似乎是一个混乱的工作,但想看看是否有人有想法,使我的生活更容易。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-09-03 03:38:50

提取时间,用-拆分它们,将它们与小时或日单位相匹配,转换为天:

代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32365868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档