R:将YouTube视频时长格式化为适当的时间(秒)

问题描述 投票:1回答:1

我有矢量(列数据),其中包含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*360021M = 21*605S = 5*1

r string-formatting
1个回答
2
投票

我用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之间的所有东西。我们什么都不用。

© www.soinside.com 2019 - 2024. All rights reserved.