R время преобразования (хх: хх: хх) в мин. as.POSIXct возвращает ошибку "символьная строка не в стандартном однозначном формате" - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть некоторые данные о времени фокусировки в формате xx: xx: xx, которые я хотел бы добавить во время нескольких сеансов. Поэтому я пытаюсь преобразовать каждый из них в минуты или любой формат, который можно суммировать и понять. Я пробовал как .POSIX.ct, но я получаю ошибку в заголовке. Я также попытался lubidate hms (day1) / 60, и я получаю еще одну ошибку. Вот сокращенный воспроизводимый пример.

day1 <- c("01:05:38", "00:56:54", "00:48:17")
day2 <- c("00:37:57", "00:21:09", "00:43:34")
day1convert <- as.numeric(as.POSIXct(day1), units = "mins")

Возвращает ошибку: «Ошибка в as.POSIXlt.character (x, tz, ...): строка символов не в стандартном однозначном формате»

library(lubridate)
convert<-hms(day1)/60

Возвращает ошибку: «Ошибка в validObject (.Object): недопустимый объект класса« Period »: периоды должны иметь целочисленные значения

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 15 февраля 2020

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

library(lubridate)
period_to_seconds(hms(day1))/60
#[1] 65.63333 56.90000 48.28333

Если вы хотите преобразовать время в POSIXct формат

as.POSIXct(day1, format = "%T", tz = "UTC")
#[1] "2020-02-15 01:05:38 UTC" "2020-02-15 00:56:54 UTC" "2020-02-15 00:48:17 UTC"
1 голос
/ 15 февраля 2020

В базе R:

sapply(strsplit(day1, ":"), function(x) as.difftime(sum(c(60, 1, 1/60)*as.numeric(x)), units="mins"))
#> [1] 65.63333 56.90000 48.28333
0 голосов
/ 15 февраля 2020

1) chron :: times Используйте класс chron times. Они могут быть добавлены, и если мы конвертируем их в цифры c, они указываются в долях дня.

library(chron)

times(day1) + times(day2)
## [1] 01:43:35 01:18:03 01:31:51

as.numeric(times(day1) + times(day2))
## [1] 0.07193287 0.05420139 0.06378472

2) data.table :: as.ITime Другая возможность это data.table's ITime. Они могут быть добавлены или преобразованы в цифры c дает секунды.

library(data.table)

as.ITime(day1) + as.ITime(day2)
## [1] "01:43:35" "01:18:03" "01:31:51"

as.numeric(as.ITime(day1) + as.ITime(day2))
## [1] 6215 4683 5511
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...