使用gsub和regexpr在r中设置字符串

时间:2016-07-06 19:08:20

标签: r string expression

我需要更改以下内容

test <- c("August 08, 2016, Hour 23",
          "June 26, 2016, Hour 14",
          "November 26, 2016, Hour 01")

test1 <- c("Wednesday:8pm-12pm:31days",
"Tuesday:7pm-10pm:6days|Today:7AM-6PM:7days")

编辑: - 在test1中,我并不太关心一周中的哪一天,但对时间戳更感兴趣。我希望看到8 PM-12PM转换为24小时时间格式为:2000 - 我同意字符串作为输出,因为我需要一个4位数字。 (上午10点之前的任何事情都需要是0x)

分为两个数据集: -

a$date <- c(08/08/2016,06/26/2016,11/26/2016) # all in date class
a$hour <- c(23, 14 , 01) #all should be numeric


b$time <- c("2000","1922","0718") #can be character
b$days <- c(31,6,7)  #needs to be numeric

小时和日期案例的逻辑相似。我希望在R中使用gsubregexpr

我对日期部分的当前流程太长且乏味: -

mat <- as.data.frame(matrix(unlist(strsplit(test," ")),ncol=5,byrow=T))

mat$V6 <-  str_replace_all(paste(as.numeric(str_replace_all(mat$V2,"[[:punct:]]","")),
                          "-",as.character(mat$V1),
                          "-",as.numeric(str_replace_all(mat$V3,"[[:punct:]]",""))),
                          "[[:space:]]","")


mat$V7 <- as.Date(mat$V6, format="%d-%B-%Y")

class(mat$V7)

mat$V8 <- as.numeric(as.character(mat$V5))

在这两种情况下使用gsubregexpr的任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

这与你的垫线相同。继续尝试。

library(reshape2)
mat <- colsplit(test," ", c("M","D","YYYY","HR","Time"))

我认为这是你最好的选择,而不是使用gsub或regexpr。

mat$Len <- paste(mat$D,mat$M,mat$YYYY)
mat$Len <- gsub(",","",gsub(" ","-",mat$Len))

我不喜欢使用嵌套的gsub,但它在这里有用。保持这一点更简洁。这应该照顾垫$ v6线。