R, чтобы найти продолжительность времени

Я использовал библиотеку lubridate, чтобы найти разницу между временем начала и временем окончания. Вот мой код:

library(lubridate)

a <- read.csv("C:/Users/Desktop/Dump.csv")

b <- a$StartTime 
c <- a$EndTime

hm(c)- hm(b)

Это мой результат для кода:

   [1] "1H -18M 0S" "1H 5M 0S"   "1H 16M 0S"  "1H 16M 0S"  "1H 5M 0S"   "1H 16M 0S"  "1H 18M 0S" 
   [8] "44M 0S"     "1H 0M 0S"   "1H 23M 0S"  "2H -41M 0S" "1H -18M 0S" "1H -18M 0S" "1H -16M 0S"
  [15] "1H 0M 0S"   "41M 0S"     "1H 0M 0S"   "24M 0S"     "1H -20M 0S" "1H 0M 0S"   "1H -19M 0S"
  [22] "1H 16M 0S"  "1H 25M 0S"  "1H 10M 0S"  "1H 16M 0S"  "44M 0S"     "1H 18M 0S"  "1H 23M 0S" 
  [29] "1H -19M 0S" "1H 6M 0S"   "1H 16M 0S"  "1H -19M 0S" "1H -17M 0S" "1H -20M 0S" "1H 0M 0S"  
  [36] "2H -40M 0S" "2H -40M 0S" "1H -20M 0S" "1H -20M 0S" "1H 5M 0S"   "1H 17M 0S"  "1H 11M 0S" 
  [43] "1H -23M 0S" "1H -30M 0S" "1H -29M 0S" "1H -19M 0S" "45M 0S"     "1H -19M 0S" "1H 1M 0S"  
  [50] "1H -6M 0S"  "30M 0S"     "1H 28M 0S"  "1H -21M 0S" "30M 0S"     "1H 1M 0S"   "1H -10M 0S"
  [57] "1H 0M 0S"   "1H -28M 0S" "42M 0S"     "51M 0S"     "52M 0S"     "1H 17M 0S"  "2H -43M 0S"
  [64] "1H -19M 0S" "1H 1M 0S"   "1H -26M 0S" "50M 0S"     "1H -19M 0S" "1H 0M 0S"   "1H -23M 0S"
  [71] "1H 2M 0S"   "40M 0S"     "30M 0S"     "1H -15M 0S" "1H -6M 0S"  "30M 0S"     "1H -33M 0S"
  [78] "1H -20M 0S" "1H 4M 0S"   "41M 0S"     "1H 13M 0S"  "1H 0M 0S"   "1H 0M 0S"   "1H -30M 0S"
  [85] "29M 0S"     "1H 10M 0S"  "1H 5M 0S"   "1H 0M 0S"   "1H -27M 0S" "51M 0S"     "1H -5M 0S" 
  [92] "31M 0S"     "1H -30M 0S" "33M 0S"     "1H 0M 0S"   "36M 0S"     "2H -43M 0S" "1H -30M 0S"
  [99] "34M 0S"     "50M 0S"     "1H -31M 0S" "41M 0S"     "50M 0S"     "1H -15M 0S" "1H -15M 0S"

Это мой результат, но он имеет отрицательное значение в минутах, что означает, что правильный ответ - «час - минуты». Кто-нибудь знает, где мой код неправильный, или я забыл что-нибудь закодировать.

Формат данных факторный.


person user9330556    schedule 12.08.2018    source источник
comment
Может быть полезно включить формат ввода, поэтому можете ли вы включить вывод из dput(head(a,n=20))? Могут быть другие способы получить то, что вам нужно (с lubridate или без него).   -  person r2evans    schedule 12.08.2018


Ответы (1)


Вероятно, у вас есть база данных времени сигналов (приведенный код не воспроизводит такие результаты). Тем не менее, попробуйте рассчитать прошедшее время (время2 - время3 или время2%--%время3) и использовать продолжительность, чтобы иметь в правильном формате

time2 <- c("12:23:11", "09:45:31", "12:05:22")
time3 <- c("2:14", "2:16", "3:35")
time2 <- hms(time2)
## [1] "12H 23M 11S" "9H 45M 31S"  "12H 5M 22S"
time3 <- hm(time3)
## [1] "2H 14M 0S" "2H 16M 0S" "3H 35M 0S"
elapsed.time <- time2 - time3
as.duration(elapsed.time)
person Nar    schedule 12.08.2018
comment
Я беру формат из вашего примера, который был hms (часы/минуты/секунды). Любой формат подходит, если вы укажете его с помощью as.Data в lubridate, чтобы вы могли правильно определить продолжительность. - person Nar; 13.08.2018