使用read.csv()读取csv文件,而不会丢失毫秒

2j4z5cfb  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(119)

我有一个带有时间戳列的csv文件。时间戳的格式为%Y-%m-%d %H:%M:%OS4,即毫秒值也是4位数。当我使用read.csv()读取这个csv时,我没有得到毫秒,而只是得到字符格式的秒。我怎么能读毫秒呢?
编辑添加需要数据和代码:
mtc_data = read.csv(path/to/csv)
Notepad.pw link to data

tvokkenx

tvokkenx1#

在阅读read.csv之后(您可能希望使用选项stringsAsFactors=FALSE),使用as.POSIXct和您已有的格式字符串。毫秒存储在内部。使用strftime可以显示毫秒,变量不再是"POSIXct",而是"character"。在阅读后使用trimws来删除不必要的空格可能更安全。

dat <- read.csv("V:/R/_data/yourData.csv", stringsAsFactors=FALSE)
(x <- as.POSIXct(trimws(dat$timestamp), format="%Y-%m-%d %H:%M:%OS"))
# [1] "2018-11-20 00:00:00 CET" "2018-11-20 00:00:05 CET" "2018-11-20 00:00:07 CET"

x2 <- strftime(x, format="%Y-%m-%d %H:%M:%OS6")
x2
# [1] "2018-11-20 00:00:00.000000" "2018-11-20 00:00:05.058399" "2018-11-20 00:00:07.540699"

字符串

tyky79it

tyky79it2#

如果在调用read.csv时将“POSIXct”指定为datetime列的colClass,则将保留时间信息(包括毫秒),如下所示。

# my_options <- options(digits.secs = 4) 
df <- read.csv(
  "data.csv"
  ,colClasses = c("POSIXct","factor")
  ,na.strings = c("")
)

print(
  format(df$timestamp[2], '%Y-%m-%d %H:%M:%OS4') 
) # "2018-11-20 00:00:05.0583"

字符串
指定options(digits.secs = 4)有助于将毫秒显示设置为四位数,但不需要保留信息(至少在本例中是这样)。指定na.strings来处理缺失值也很有用。还需要注意的是,POSIXct似乎没有处理默认情况下用“T”分隔日期和时间的ISO standard dates:如果它找到一个时间信息,它将截断时间信息,所以如果你有这些,你可能需要先用空格替换“T”。
参见read.csv文档here
作为参考,CSV文件为:

"timestamp","execution"
2018-11-20 00:00:00.0000,"STOPPED"
2018-11-20 00:00:05.0584,"STOPPED"
2018-11-20 00:00:07.5407,"RUNNING"

相关问题