从R中的CSV文件中读取时间

问题描述:

我想读取用“;”分隔的CSV文件。其中包含四列,如:从R中的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

你有没有尝试as.POSIXlt代替as.Date?因为你正在阅读的时间不是日期在这里....另外,国际海事组织我读它原始,然后粘贴在一起,然后运行POSIX ...像这里:http://*.com/questions/35624659/how - 找到时间差的过程 - 一个文件在r/35625097#35625097 – user3293236

+0

谢谢你分享链接,这是非常有帮助的! – Harald

是否有一个特别的原因,你为什么要在导入过程中做到这一点,而不是之后?这似乎更容易导入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)