Как прочитать формат времени «hms» за пределами 24 часов? - PullRequest
1 голос
/ 27 октября 2019

Я делаю временной ряд, в котором измерения активности проводились с интервалом в 1 минуту в течение 48 часов. Я использую переменную «Истекшее время» в качестве моего значения х. В Excel он был отформатирован как время до 48 часов, но при импорте в R все, что более 24 часов, было зарегистрировано как N/A В результате мои графики останавливаются на 24 часах.

Ввод str(data) дал мне это:

$ TimeElapsed: 'hms' num  00:01:30 00:02:30 00:03:30 00:04:30 ...
  ..- attr(*, "units")= chr "secs"`

Форматирование правильное <24 часа, а затем после этого становится <code>NA.

По чьему-то совету я попытался связать его с RunDate:

z1 <- format(data$RunDate,"%Y-%m-%d")
z2 <- format(data$TimeElapsed, "%H:%M:%S")
## RunDate and TimeElapsed combined:
z3 <- as.POSIXct(paste(z1,z2,sep = " "), format = "%Y-%m-%d %H:%M:%S")
start_date <- "2019-06-11"
start_time <- "14:00:00"
start_dt <- as.POSIXct(paste(start_date,start_time,sep = " "), 
                       format = "%Y-%m-%d %H:%M:%S")

Но только получило это сообщение об ошибке:

Ошибка в format.default (данные $ RunDate, "% Y-% m-% d"): недопустимая 'trim'аргумент

Некоторые мои примеры данных могут быть такими:

ID       TimeElapsed   RunDate       Activity
Zx8      47:52:30      15-Jun-19      30
Zx8      47:53:30      15-Jun-19      0  
Zx8      47:54:30      15-Jun-19      6
Zx12     47:55:30      15-Jun-19      23
Zx12     47:56:30      15-Jun-19      14
Zx12     47:57:30      15-Jun-19      0

Как получить R для чтения формата времени за пределами 24 часов?

1 Ответ

2 голосов
/ 28 октября 2019

Если вам просто нужно правильное число (т. Е. Вы не пытаетесь выполнить сложную последующую обработку / черчение в формате H: M: S), вы можете использовать простой рецепт, основанный на strsplit(), для преобразования H:Формат M: S в часах:

dd <- read.table(header=TRUE,stringsAsFactors=FALSE, text="
ID       TimeElapsed   RunDate       Activity
Zx8      47:52:30      15-Jun-19      30
Zx8      47:53:30      15-Jun-19      0  
Zx8      47:54:30      15-Jun-19      6
Zx12     47:55:30      15-Jun-19      23
Zx12     47:56:30      15-Jun-19      14
Zx12     47:57:30      15-Jun-19      0
")

dd$NumTime <- sapply(strsplit(dd$TimeElapsed,":"),
        function(x) sum(as.numeric(x)*c(1,1/60,1/3600)))

(Преобразование в секунды вместо часов должно быть простым, если вы предпочитаете это.)

При построении графика проще всего было бы указать меткивручную (например, метки «0:00», «24:00», «48:00»). При использовании ggplot2 вы можете вручную определить свою собственную преобразованную ось (с помощью ?scales::trans_new, используя преобразование идентичности / обратное преобразование и указав соответствующую функцию для format).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...