R 小时:分钟:秒到秒

R 小时:分钟:秒到秒,r,datetime-conversion,R,Datetime Conversion,我正在尝试将列中的一长串值从小时:分钟:秒转换为秒。只要值是H:M:S格式,我下面的代码就可以正常工作,但我有随机行中的值是M:S格式的(所以没有小时)。当我尝试在它们上执行下面的代码时,我显然获得了每个值的NA。有没有一种方法可以让我只搜索M:S格式的值,只搜索H:M:S格式的值,然后分别进行转换?我是否需要在每个M:S值中添加一个小时值,以便一次转换所有值?我的代码如下: as.numeric(strptime(df$x, format="%H:%M:%S") - as.POSIXct(fo

我正在尝试将列中的一长串值从小时:分钟:秒转换为秒。只要值是H:M:S格式,我下面的代码就可以正常工作,但我有随机行中的值是M:S格式的(所以没有小时)。当我尝试在它们上执行下面的代码时,我显然获得了每个值的NA。有没有一种方法可以让我只搜索M:S格式的值,只搜索H:M:S格式的值,然后分别进行转换?我是否需要在每个M:S值中添加一个小时值,以便一次转换所有值?我的代码如下:

as.numeric(strptime(df$x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs")

Example of data:
    Time
    12:22:05
    42:44

Example of data after running above:
    Time
    44525
    NA

使用lubridate软件包时,尝试解析日期时间

df$time <- parse_date_time(x = df$time, c("HMS","MS"))

df$time在使用
lubridate
软件包时尝试
parse_date_time

df$time <- parse_date_time(x = df$time, c("HMS","MS"))

df$time您向M:S格式添加小时值的建议似乎也很容易实现:

x = c("12:22:05", "42:44")
x[nchar(x)<8] <- paste0("00:", x[nchar(x)<8])
as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs")
## 44525  2564
x=c(“12:22:05”、“42:44”)

x[nchar(x)您为M:S格式增加小时值的建议似乎也很容易实现:

x = c("12:22:05", "42:44")
x[nchar(x)<8] <- paste0("00:", x[nchar(x)<8])
as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs")
## 44525  2564
x=c(“12:22:05”、“42:44”)

x[nchar(x)供参考,目标是午夜后的秒数(显然要感谢OP刚才的编辑)。谢谢,我相信这应该行得通。一旦我运行它,我将接受答案!我实际上是在寻找一个简单的H:M:S到S转换,而不仅仅是从午夜开始的秒数。我有几个小时数超过24小时的值,所以考虑到我以前使用的方法,这些值不会太好。
lubridate
有一个函数
period_to_seconds
,它需要一个时间并返回它所代表的一天中的秒数。我有点困惑,为什么时间值超过
24
…它们不是时间而是持续时间?仅供参考,目标是从午夜开始的秒数(显然要感谢OP刚才的编辑)。谢谢,我相信这应该行得通。一旦我运行它,我将接受答案!我实际上是在寻找一个简单的H:M:S到S转换,而不仅仅是从午夜开始的秒数。我有几个小时数超过24小时的值,所以考虑到我以前使用的方法,这些值不会太好。
lubridate
有一个函数
period_to_seconds
,它需要一个时间并返回它所代表的一天中的秒数。我有点困惑,为什么时间值超过
24
…它们不是时间而是持续时间吗?