如何在 R 中独立于日期格式化时间?我有一个要加减的时间向量;但是,当我将向量格式化为 POSIXct()、POSIXlt() 或 strptime() 时,R 会为其附加一个日期:
> sample
V1
1 1:23
2 5:20
3 2:28
4 1:38
5 6:27
6 2:19
7 0:22
8 6:25
9 5:07
10 2:28
11 2:33
12 0:03
13 3:58
> str(sample)
'data.frame': 13 obs. of 1 variable:
$ V1: Factor w/ 12 levels "0:03","0:22",..: 3 10 6 4 12 5 2 11 9 6 ...
> sample.1 = strptime(sample$V1, format = "%M:%S")
> sample.1
[1] "2017-03-18 00:01:23 PDT" "2017-03-18 00:05:20 PDT" "2017-03-18 00:02:28 PDT"
[4] "2017-03-18 00:01:38 PDT" "2017-03-18 00:06:27 PDT" "2017-03-18 00:02:19 PDT"
[7] "2017-03-18 00:00:22 PDT" "2017-03-18 00:06:25 PDT" "2017-03-18 00:05:07 PDT"
[10] "2017-03-18 00:02:28 PDT" "2017-03-18 00:02:33 PDT" "2017-03-18 00:00:03 PDT"
[13] "2017-03-18 00:03:58 PDT"
> str(sample.1)
POSIXlt[1:13], format: "2017-03-18 00:01:23" "2017-03-18 00:05:20" "2017-03-18 00:02:28" ...
> sample.2 = as.POSIXct(sample$V1, format = "%M:%S")
> sample.2
[1] "2017-03-18 00:01:23 PDT" "2017-03-18 00:05:20 PDT" "2017-03-18 00:02:28 PDT"
[4] "2017-03-18 00:01:38 PDT" "2017-03-18 00:06:27 PDT" "2017-03-18 00:02:19 PDT"
[7] "2017-03-18 00:00:22 PDT" "2017-03-18 00:06:25 PDT" "2017-03-18 00:05:07 PDT"
[10] "2017-03-18 00:02:28 PDT" "2017-03-18 00:02:33 PDT" "2017-03-18 00:00:03 PDT"
[13] "2017-03-18 00:03:58 PDT"
> str(sample.2)
POSIXct[1:13], format: "2017-03-18 00:01:23" "2017-03-18 00:05:20" "2017-03-18 00:02:28" ...
> sample.3 = as.POSIXlt(sample$V1, format = "%M:%S")
> sample.3
[1] "2017-03-18 00:01:23 PDT" "2017-03-18 00:05:20 PDT" "2017-03-18 00:02:28 PDT"
[4] "2017-03-18 00:01:38 PDT" "2017-03-18 00:06:27 PDT" "2017-03-18 00:02:19 PDT"
[7] "2017-03-18 00:00:22 PDT" "2017-03-18 00:06:25 PDT" "2017-03-18 00:05:07 PDT"
[10] "2017-03-18 00:02:28 PDT" "2017-03-18 00:02:33 PDT" "2017-03-18 00:00:03 PDT"
[13] "2017-03-18 00:03:58 PDT"
> str(sample.3)
POSIXlt[1:13], format: "2017-03-18 00:01:23" "2017-03-18 00:05:20" "2017-03-18 00:02:28" ...
我之前问过这个,它被标记为重复。但是,它被标记为重复的问题没有得到回答。我试图在编辑中解释这一点,但该编辑被忽略了。确实,我发现这个问题在 SO 和其他网站上被问了很多次;但是,我从未见过它得到令人满意的回答。我发现的最接近的是:
> library(chron)
> sample.4 = ms(sample$V1)
> sample.4
[1] "1M 23S" "5M 20S" "2M 28S" "1M 38S" "6M 27S" "2M 19S" "22S" "6M 25S" "5M 7S" "2M 28S"
[11] "2M 33S" "3S" "3M 58S"
> str(sample.4)
Formal class 'Period' [package "lubridate"] with 6 slots
..@ .Data : num [1:13] 23 20 28 38 27 19 22 25 7 28 ...
..@ year : num [1:13] 0 0 0 0 0 0 0 0 0 0 ...
..@ month : num [1:13] 0 0 0 0 0 0 0 0 0 0 ...
..@ day : num [1:13] 0 0 0 0 0 0 0 0 0 0 ...
..@ hour : num [1:13] 0 0 0 0 0 0 0 0 0 0 ...
..@ minute: num [1:13] 1 5 2 1 6 2 0 6 5 2 ...
chron::ms() 允许我将 sample$V1 格式化为“句点”,而无需插入不需要的日期;但是,当我尝试加法或减法时遇到了问题:
> a = sample.4[1] + sample.4[2] + sample.4[13]
> b = sample.4[2] - sample.4[3]
> a
[1] "9M 101S"
> b
[1] "3M -8S"
显然“a”应该等于“10:41”而不是“9M 101S”,“b”应该等于“2:52”而不是“3M -8S”。操作是准确的,但它的显示违背了目的。有没有办法简单地让这些结果以有意义的方式显示?或者,是否有其他功能可以在没有日期的情况下格式化时间?谢谢你的帮助。