所以我目前读入的.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)之后将这些值存储为设定的秒数,并在计算中实际使用这些日期?
使用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
下面我们输入一个字符串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