我需要更改以下内容
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中使用gsub
和regexpr
我对日期部分的当前流程太长且乏味: -
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))
在这两种情况下使用gsub
和regexpr
的任何建议都将受到赞赏。
答案 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线。