在R中将字符解析为时间

在R中将字符解析为时间,r,R,我有以下数据: a = c("13:10.3","20:40.4") 我想把它转换成时间。我尝试了以下两种方法 as.POSIXlt(head(a), format= "%S:%M.%H") 但将2016-03-04 03:10:13 PST作为输出。我不想要这里的日期和时区。只要时间 我也试过, chron(head(a), format = "%ss:%mm.%h") or chron(head(a), format = "%S:%M.%h") 但是得到以下错误 Error in pa

我有以下数据:

a = c("13:10.3","20:40.4")
我想把它转换成时间。我尝试了以下两种方法

as.POSIXlt(head(a), format= "%S:%M.%H")
但将
2016-03-04 03:10:13 PST
作为输出。我不想要这里的日期和时区。只要时间

我也试过,

chron(head(a), format = "%ss:%mm.%h") or chron(head(a), format = "%S:%M.%h")
但是得到以下错误

Error in parse.format(format) : unrecognized format %ss:%mm.%h

有人能帮我做这件事吗?

POSIXlt
结合了日期和时间,但您可以使用
format()
仅显示时间部分:

format(as.POSIXlt(head(a), format= "%S:%M.%H"), format= "%S:%M.%H")
[1] "13:10.03" "20:40.04"

POSIXlt
结合了日期和时间,但您可以使用
format()
仅显示时间部分:

format(as.POSIXlt(head(a), format= "%S:%M.%H"), format= "%S:%M.%H")
[1] "13:10.03" "20:40.04"

您可以使用
lubridate
包,该包除了POSIXlt和POSIXct之外,还有几种类型的对象用于存储时间对象

例如,您可以手动解析以避免任何到POSIX的转换:

library(lubridate)
lapply(strsplit(c("13:10.3","20:40.4"), '[:.]'), 
       function(x){seconds(x[1]) + minutes(x[2]) + hours(x[3])}
)
它返回两个
lubridate
Period
对象:

[[1]]
[1] "3H 10M 13S"

[[2]]
[1] "4H 40M 20S"
如果您的数据以更好的格式开始,它有许多非常好的帮助函数可以简化:

> hms(c("13:10.3","20:40.4"))
[1] "13H 10M 3S" "20H 40M 4S"

您可以使用
lubridate
包,该包除了POSIXlt和POSIXct之外,还有几种类型的对象用于存储时间对象

例如,您可以手动解析以避免任何到POSIX的转换:

library(lubridate)
lapply(strsplit(c("13:10.3","20:40.4"), '[:.]'), 
       function(x){seconds(x[1]) + minutes(x[2]) + hours(x[3])}
)
它返回两个
lubridate
Period
对象:

[[1]]
[1] "3H 10M 13S"

[[2]]
[1] "4H 40M 20S"
如果您的数据以更好的格式开始,它有许多非常好的帮助函数可以简化:

> hms(c("13:10.3","20:40.4"))
[1] "13H 10M 3S" "20H 40M 4S"

chron软件包具有
“times”
类:

library(chron)
a <- c("13:10.3","20:40.4")

tt <- times(chartr(".", ":", a))
tt
## [1] 13:10:03 20:40:04

tt + 1/24 # add one hour
## [1] 14:10:03 21:40:04
库(chron)

achron软件包具有
“times”
类:

library(chron)
a <- c("13:10.3","20:40.4")

tt <- times(chartr(".", ":", a))
tt
## [1] 13:10:03 20:40:04

tt + 1/24 # add one hour
## [1] 14:10:03 21:40:04
库(chron)

a(base)R中没有just time类。为什么不忽略datetime对象的date组件呢?@nrussell如果你不介意,你能解释一下怎么做吗?你已经做了:
as.POSIXlt(head(a),format=“%S:%M.%H”)
。我的意思是假装日期和时区组件不存在。或者你可以使用
data.table提供的
ITime
类。我认为:
data.table::as.ITime(c(“13:10.3”,“20:40.4”),format=“%H:%m.%S”)
。在(base)中没有时间类R.为什么不忽略datetime对象的日期组件?@nrussell如果你不介意,你能解释一下怎么做吗?你已经做了:
as.POSIXlt(head(a),format=“%S:%M.%H”)
。我是说假装日期和时区组件不存在。或者你可以使用
data.table
提供的
ITime
类。我认为:
data.table::as.ITime(c(“13:10.3”,“20:40.4”),format=“%H:%m.%S”)
。这个类将其转换回字符。我们该怎么做才能将其作为时间?类(格式(如.POSIXlt(head(a),format=“%S:%M.%H”),format=“%H:%M:%S”))“character”正如@nrussel所写,没有时间对象,这通常不是什么大问题。因为你的问题是你只想显示时间部分,所以我认为我的答案是可以的。或者,您可以使用一个整数表示时间,该整数将是从午夜开始的秒数…
格式(strtime(a,“%H:%M.%S”),“%H:%M:%S”)
执行相同的操作,并且略短一些。此格式将其转换回字符。我们该怎么做才能将其作为时间?类(格式(如.POSIXlt(head(a),format=“%S:%M.%H”),format=“%H:%M:%S”))“character”正如@nrussel所写,没有时间对象,这通常不是什么大问题。因为你的问题是你只想显示时间部分,所以我认为我的答案是可以的。或者,您可以用一个整数来表示时间,该整数是从午夜开始的秒数…
格式(strtime(a,“%H:%M.%S”),“%H:%M:%S”)
也可以这样做,并且稍微短一些。我们可以将其作为正常时间格式吗?对象以特定的标准化格式存储。您可以按照您想要的方式格式化它们,但这样做会将它们强制为字符串,而您似乎并不需要这些字符串。通常,格式化应该是您的最后一步。
chron
包的
times
对象可能更符合您的喜好。不过,解析句点很麻烦,所以您必须替换它们:
library(chron);chron(times.=gsub(“\\”,“:”,c(“13:10.3”,“20:40.4”)),format=c(times='s:m:h'))
我们可以将其作为一种正常的时间格式吗?对象以特定的标准化格式存储。您可以按照您想要的方式格式化它们,但这样做会将它们强制为字符串,而您似乎并不需要这些字符串。通常,格式化应该是您的最后一步。
chron
包的
times
对象可能更符合您的喜好。不过,解析句点很麻烦,所以您必须替换它们:
library(chron);时间(times.=gsub(“\\”,“:”,c(“13:10.3”,“20:40.4”)),格式=c(times='s:m:h'))