在R中,我有以下向量,我试图得到以下结果:
vec <- c("6-9 h", "9-13 h", "13-16 h", "16-18 h")
res <- c("06:00-09:00", "09:00-13:00", "13:00-16:00", "16:00-18:00")
我使用gsub函数的方法部分起作用。
gsub("(.*)-(.*) (.*)", "\\1:00-\\2:00", vec)
# result:
"6:00-9:00" "9:00-13:00" "13:00-16:00" "16:00-18:00"
现在我的问题是:有没有一种方法可以用正则表达式输入个位数的零?
发布于 2015-03-23 12:59:50
你需要再使用一个gsub函数。
> vec <- c("6-9 h", "9-13 h", "13-16 h", "16-18 h")
> m <- gsub("(.*)-(.*) (.*)", "\\1:00-\\2:00", vec)
> gsub("\\b(\\d):", "0\\1:", m)
[1] "06:00-09:00" "09:00-13:00" "13:00-16:00" "16:00-18:00"
\\b(\\d):
与正好有一个数字的数字匹配。\b
匹配单词字符和非单词字符.
发布于 2015-03-23 13:09:14
下面是一种sprintf
方法:
sapply(regmatches(vec, gregexpr("\\d+", vec)), function(x) {
x <- as.numeric(x)
sprintf("%02d:00-%02d:00", x[1], x[2])
})
# [1] "06:00-09:00" "09:00-13:00" "13:00-16:00" "16:00-18:00"
https://stackoverflow.com/questions/29210792
复制相似问题