【问题标题】:How to read CSV file with dates like YYYY-MM-DD and time like YYYY-MM-DD HH:MM:SS?如何读取日期为 YYYY-MM-DD 和时间为 YYYY-MM-DD HH:MM:SS 的 CSV 文件?
【发布时间】:2015-06-01 07:16:30
【问题描述】:

我有一个 csv 文件,其内容如下:

VA1,VA2,2014-05-24,,2014-05-22 15:50:16
VA2,VA1,2014-05-24,2014-05-26,2014-05-22 15:50:16

如何阅读? 标准 read.csv 无法识别日期 YYYY-MM-DD。我尝试使用read.zoo,但不知道如何使用:

  1. 表示使用了两种不同的日期和时间格式:YYYY-MM-DD 和 YYYY-MM-DD HH:MM:SS;
  2. 表示可以为空值。

这是我尝试过的:

library(zoo)
colClasses <- c("factor", "factor", "Date", "Date", "Date")
fmt <- "%Y-%m-%d"
z <- read.zoo("file.csv", header = FALSE, sep = ",", quote = "", format = fmt, tz = "", colClasses = colClasses)

【问题讨论】:

  • thisthis 的可能欺骗。但是,fread + fasttime 可能比 read.table/zoo hack 更快。

标签: r date datetime csv


【解决方案1】:

您应该能够使用read.csv 读取表格,然后使用strptime 将第 3 列和第 4 列设置为日期和日期时间对象:

对于第 3 列:

data[,3] = as.POSIXct(as.character(data[,3]))

对于第 4 列:

data[,4] = as.POSIXct(as.character(data[,4]))

【讨论】:

  • 谢谢。但它返回以下警告 - Warning In [(*tmp*, , "mycolumnname", value = list(sec = c(NA_real_, : suggested 11 variables to replace 1 variable (不确定准确的 En 翻译,因为我的 R 在本地语言中返回错误)。结果值被转换为numeric。但是与as.Date 相同的代码运行良好并返回Date
  • 好吧,我的错,不像 with strptime 那样工作,因为它创建的对象是一个列表。我正在更新可行的答案
【解决方案2】:

您不能使用read.zoo 来读取此类数据。它适用于时间序列。试试下面的。不需要包裹。下面的代码已被编写为自包含但text = Lines 部分可以替换为文件名,例如read.table("myfile.dat", ...whatever...):

Lines <- "VA1,VA2,2014-05-24,,2014-05-22 15:50:16
VA2,VA1,2014-05-24,2014-05-26,2014-05-22 15:50:16"

DF <- read.table(text = Lines, sep = ",", as.is = TRUE, na.strings = "")
transform(DF, V3 = as.Date(V3), V4 = as.Date(V4), V5 = as.POSIXct(V5))

给予:

   V1  V2         V3         V4                  V5
1 VA1 VA2 2014-05-24       <NA> 2014-05-22 15:50:16
2 VA2 VA1 2014-05-24 2014-05-26 2014-05-22 15:50:16

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2017-08-21
    • 2013-11-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多