R Find time difference in seconds for YYYY-MM-DD HH:MM:SS.MMM format

前端 未结 2 1742
南方客
南方客 2021-02-07 10:08

I\'m trying to subtract 2 character vectors containing date time information in the following format:

> dput(train2)

structure(list(time2 = c(\"2011-09-01 23         


        
相关标签:
2条回答
  • 2021-02-07 10:39
    >  x1<-"2013-03-03 23:26:46.315" 
    >  x2<-"2013-03-03 23:31:53.091"
    >  x1 <- strptime(x1, "%Y-%m-%d %H:%M:%OS")
    >  x2 <- strptime(x2, "%Y-%m-%d %H:%M:%OS")
    > x1
    [1] "2013-03-03 23:26:46"
    > x2
    [1] "2013-03-03 23:31:53"
    

    I followed the answer of @Dirk Eddelbuettel, but I am losing precision. How can I force R to not be cuting parts of second?

    Thankfully (man of strptime) I answered my question myself:

    op <- options(digits.secs = 3)
    

    After applying this setting the precision will be used.

    http://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html

    The belowe may be useful if you would like to get difference in seconds, but get in minutes:

    > as.numeric(x2-x1,units="secs")
    [1] 306.776
    
    0 讨论(0)
  • 2021-02-07 10:43

    Easy peasy:

    R> now <- Sys.time()
    R> then <- Sys.time()
    R> then - now
    Time difference of 5.357 secs
    R> class(then - now)
    [1] "difftime"
    R> as.numeric(then - now)
    [1] 5.357
    R> 
    

    And for your data:

    R> df
                        time2                   time3
    1 2011-09-01 23:44:52.533 2011-09-01 23:43:59.752
    2  2011-09-05 12:25:37.42 2011-09-05 12:25:01.187
    3  2011-08-24 12:56:58.91 2011-08-24 12:55:13.012
    4 2011-10-25 07:18:14.722 2011-10-25 07:16:51.759
    5 2011-10-25 07:19:51.697 2011-10-25 07:16:51.759
    R> df$time2 <- strptime(df$time2, "%Y-%m-%d %H:%M:%OS")
    R> df$time3 <- strptime(df$time3, "%Y-%m-%d %H:%M:%OS")
    R> df
                        time2                   time3
    1 2011-09-01 23:44:52.533 2011-09-01 23:43:59.752
    2 2011-09-05 12:25:37.420 2011-09-05 12:25:01.187
    3 2011-08-24 12:56:58.910 2011-08-24 12:55:13.012
    4 2011-10-25 07:18:14.722 2011-10-25 07:16:51.759
    5 2011-10-25 07:19:51.697 2011-10-25 07:16:51.759
    R> df$time2 - df$time3
    Time differences in secs
    [1]  52.781  36.233 105.898  82.963 179.938
    attr(,"tzone")
    [1] ""
    R> 
    

    and added back as a numeric to the data frame:

    R> df$dt <- as.numeric(df$time2 - df$time3)
    R> df
                        time2                   time3      dt
    1 2011-09-01 23:44:52.533 2011-09-01 23:43:59.752  52.781
    2 2011-09-05 12:25:37.420 2011-09-05 12:25:01.187  36.233
    3 2011-08-24 12:56:58.910 2011-08-24 12:55:13.012 105.898
    4 2011-10-25 07:18:14.722 2011-10-25 07:16:51.759  82.963
    5 2011-10-25 07:19:51.697 2011-10-25 07:16:51.759 179.938
    R> 
    
    0 讨论(0)
提交回复
热议问题