我有矢量(列数据),其中包含R中字符串格式的youtube播放持续时间。
x <- c(PT1H8S, PT9M55S, PT13M57S, PT1M5S, PT30M12S, PT1H21M5S, PT6M48S, PT31S, PT2M)
如何摆脱PT
然后获得以秒为单位格式的整体持续时间?
结果向量应该是c(3608, 595, 837, 65, 1812, 4865, 408, 31, 120)
例如:PT1H21M5S
以秒= 4865的形式。(计算为1H = 1*3600
,21M = 21*60
,5S = 5*1
)
我用regex命令编写了一个小应用循环,删除除了秒,分钟或小时之外的所有内容,然后将所有内容转换为秒。
x <- c("PT1H8S", "PT9M55S", "PT13M57S", "PT1M5S", "PT30M12S", "PT1H21M5S", "PT6M48S")
x2 <- sapply(x, function(i){
t <- as.numeric(gsub("^(.*)M|^(.*)H|S$", "", i))
if(grepl("M", i)) t <- t + as.numeric(gsub("^(.*)PT|^(.*)H|M(.*)$", "",i)) * 60
if(grepl("H", i)) t <- t + as.numeric(gsub("^(.*)PT|H(.*)$", "",i)) * 3600
t
})
x2
PT1H8S PT9M55S PT13M57S PT1M5S PT30M12S PT1H21M5S PT6M48S
3608 595 837 65 1812 4865 408
编辑:每个请求
x <- c("PT1H8S", "PT9M55S", "PT13M57S", "PT1M5S", "PT30M12S", "PT1H21M5S", "PT6M48S", "PT31S", "PT2M")
x2 <- sapply(x, function(i){
t <- 0
if(grepl("S", i)) t <- t + as.numeric(gsub("^(.*)PT|^(.*)M|^(.*)H|S$", "", i))
if(grepl("M", i)) t <- t + as.numeric(gsub("^(.*)PT|^(.*)H|M(.*)$", "",i)) * 60
if(grepl("H", i)) t <- t + as.numeric(gsub("^(.*)PT|H(.*)$", "",i)) * 3600
t
})
x2
PT1H8S PT9M55S PT13M57S PT1M5S PT30M12S PT1H21M5S PT6M48S PT31S PT2M
3608 595 837 65 1812 4865 408 31 120
这应涵盖所有情况。如果有更多,诀窍是改变正则表达式。 ^
是角色向量的开始,$
是结束。 (.*)
就是一切。所以^(.*)H
意味着开头和H之间的所有东西。我们什么都不用。