从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类是否定义严格?如果是这样,我应该如何改变它?
答
是否有一个特别的原因,你为什么要在导入过程中做到这一点,而不是之后?这似乎更容易导入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)
你有没有尝试as.POSIXlt代替as.Date?因为你正在阅读的时间不是日期在这里....另外,国际海事组织我读它原始,然后粘贴在一起,然后运行POSIX ...像这里:http://stackoverflow.com/questions/35624659/how - 找到时间差的过程 - 一个文件在r/35625097#35625097 – user3293236
谢谢你分享链接,这是非常有帮助的! – Harald