如何将R中的时间戳字符串转换为可以进行计算的数字?

问题描述 投票:0回答:2

所以我目前读入的.cvs文件(作为数据帧数据)包含时间戳字符串,格式如下:

year-month-day hour:minute:second,millisecond
Example: "2016-08-26 19:06:11,380"

我在ndata $ time中包含时间戳的值。我试过用

ndata$modifiedTime = as.numeric(ndata$time)

但是这没有用,因为R没有将时间戳确认为时间戳,而是作为任何其他字符串。有没有办法可以改变/重新定义时间戳字符串,以便我可以在时间0(00:00:00,000)之后将这些值存储为设定的秒数,并在计算中实际使用这些日期?

r
2个回答
1
投票

使用as.POSIXct或其他方法转换为R日期时间,然后使用as.numeric。为了操纵时间你可以使用非常有用的lubridate

tstamp <- "2016-08-26 19:06:11,380"

z <- (as.POSIXct(tstamp, format = "%Y-%m-%d %H:%M:%S", tz = "UTC"))

> as.numeric(z)
[1] 1472238371

1
投票

下面我们输入一个字符串s,然后将其转换为POSIXct对象p,然后是一个数字num,表示自Epoch(1970年1月1日)以来的秒数。

然后,我们反转该过程,创建一个POSIXct对象p2,然后将其格式化为字符串s2

我们看到原始字符串s和从num获得的字符串是相同的。

没有使用包裹。

s <- "2016-08-26 19:06:11,380" # test input

# convert string to numeric
p <- as.POSIXct(chartr(",", ".", s))
num <- as.numeric(p)

# convert numeric to string
p2 <- as.POSIXct(num, origin = "1970-01-01")
s2 <- chartr(".", ",", format(p, "%Y-%m-%d %H:%M:%OS3"))

identical(s, s2)
## [1] TRUE
© www.soinside.com 2019 - 2024. All rights reserved.