首页 文章

从R中的CSV文件读取时间

提问于
浏览
0

我想读一个用“;”分隔的CSV文件其中包含四列,例如:

16/12/2006;17:24:00;0;1
16/12/2006;17:25:00;2;3
16/12/2006;17:26:00;4;5

但我想要一个3列而不是4列的数据帧(也就是说,将两个第一列的日期和小时合并为一个列) .

到目前为止,我已经提出了受Specify custom Date format for colClasses argument in read.table/read.csv启发的这部分代码来读取数据 . 然后,我会以某种方式合并这两列 .

setClass("myDate")
setAs("character","myDate", function(from) as.Date(from, format="%d/%m/%Y") )
setClass("myTime")
setAs("character","myTime", function(from) as.Date(from, format="%H:%M:%S") )

data <- read.table(file = "file.csv", header = FALSE, sep = ";", colClasses =  c("myDate", "myTime", "numeric", "numeric"))

但是,生成的数据框确实有一个V2列,其中未正确读取小时 .

V1         V2 V3 V4
1 2006-12-16 2016-03-04  0  1
2 2006-12-16 2016-03-04  2  3
3 2006-12-16 2016-03-04  4  5

myTime类是否定义错误?如果是这样,我应该如何改变它?

1 回答

  • 2

    是否有特殊原因要在导入期间执行此操作,而不是之后?导入4列似乎更容易,使用 paste 将日期和时间合并在一起,然后使用lubridate包及其 dmy_hms 函数转换为正确的日期时间:

    require(lubridate)
    data <- read.table(file = "file.csv", header = FALSE, sep = ";")
    data$date_time <- paste(data$V1, data$V2)
    data$date_time <- dmy_hms(data$date_time)
    data[1:2] <- list(NULL)
    

相关问题