Работа с длительностями, определенными днями, часами, минутами и секундами, такими как "1d 3h 2m 28s" в R

У меня есть фрейм данных с символьными векторами в формате с днями, часами, минутами и секундами, представленными как "1d 3h 2m 28s":

> head(status[5])
    Duration 
1 0d 20h 46m 31s 
2  2d  0h 13m 54s
3  2d  0h 13m 53s
4  0d  9h 53m 38s
5  5d 12h 17m 37s
6  0d 10h 21m 19s

Я могу разобрать его с помощью regex для компонентов, но не могу придумать хороший способ преобразовать продолжительность в секунды. Я могу gsub векторы в выражение, которое приведет к количеству секунд, но упираюсь в блок при использовании eval для результатов.

Я мог бы сделать что-то похожее на то, что было рекомендовано здесь, но надеялся пойти по пути regex - даже если он не самый эффективный. Я имею дело только с разбором множества небольших HTML-таблиц.

status$duration <- gsub("(\\d+)d\\s+(\\d+)h\\s+(\\d+)m\\s+(\\d+)s.*","\\1*86400+\\2*3600+\\3*60+\\4",as.character(status[,5]),perl=TRUE)

Вышеприведенное выражение создает выражение, которое может быть оценено, но я что-то упускаю, когда дело доходит до parse(text=status$duration) и последующего eval.

В perl я привык брать "захваченные переменные" в выражении regex и сразу использовать их, а не только в строке замены. Есть ли подобные возможности в R?

Спасибо, возможно, я упускаю что-то очень простое из-за туманности ума.

6
задан Community 23 May 2017 в 11:47
поделиться