16

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:44:52.533", "2011-09-05 12:25:37.42", 
"2011-08-24 12:56:58.91", "2011-10-25 07:18:14.722", "2011-10-25 07:19:51.697"
), time3 = c("2011-09-01 23:43:59.752", "2011-09-05 12:25:01.187", 
"2011-08-24 12:55:13.012", "2011-10-25 07:16:51.759", "2011-10-25 07:16:51.759"
)), .Names = c("time2", "time3"), row.names = c(NA, 5L), class = "data.frame")

I've hunted around and played with zoo, as.Date, as.POSIXct, etc. to try and find the correct code to subtract 2 datetime objects and get an answer in seconds but without luck.

I'd appreciate any suggestions.

4

2 に答える 2

25
>  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"

@Dirk Eddelbuettelの回答に従いましたが、精度が低下しています。R を強制的に秒の一部にならないようにするにはどうすればよいですか?

ありがたいことに(strptimeの人)私は自分の質問に答えました:

op <- options(digits.secs = 3)

この設定を適用すると、精度が使用されます。

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

以下は、差を秒単位で取得したいが、分単位で取得したい場合に役立つ場合があります。

> as.numeric(x2-x1,units="secs")
[1] 306.776
于 2013-08-27T23:36:08.103 に答える
20

簡単なピージー:

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> 

そしてあなたのデータのために:

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> 

データフレームに数値として追加されます。

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> 
于 2012-09-26T22:26:19.507 に答える