进口日期&时间格式

时间:2016-01-25 15:02:21

标签: r

我有一个很长的csv文件,我想导入一些数据(基于定义colClasses)加上相应的时间戳。我尝试了两种不同的方法,第一种方法是我自己的函数(based on this answer)。这里有一些基本输入来重现结果:

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

data <- c("15.08.2008 00:00:00,Vienna,bla,142", "23.05.2010 01:00:00,Paris,bla,92")
con <- textConnection(data)

readout <- read.csv(con, colClasses=c('myDate', 'character', 'NULL', 'numeric'), header=FALSE)
print(readout)

但是,输出仅包含日期,而不包含时间(readout$V1: Date, format: "2008-08-15" "2010-05-23"):

          V1     V2  V4
1 2008-08-15 Vienna 142
2 2010-05-23  Paris  92

我也尝试使用zoo系列,但我认为这不是我想要的,虽然这样它也包含时间(数据由相应的时间戳索引):

library(zoo)
csv <-
  "timestamp,city,foo,elev
   15.08.2008 00:00:00,Vienna,bla,142
   23.05.2010 01:00:00,Paris,bla,92"
readout = read.zoo(text = csv, sep = ",", header = TRUE, index = "timestamp", format = "%d.%m.%Y %H:%M:%S", tz = "CET")

print(readout)

哪个收益率:

                    city   foo elev
2008-08-15 00:00:00 Vienna bla 142 
2010-05-23 01:00:00 Paris  bla  92 

我真正想要的是我自己的功能的结果,但也包含时间,而不仅仅是日期。

2 个答案:

答案 0 :(得分:1)

我稍微更改了你的代码。

data <- c("15.08.2008 00:00:00,Vienna,bla,142", "23.05.2010 01:00:00,Paris,bla,92")
con <- textConnection(data)


datafr <-read.csv(con,header = FALSE)

class(datafr)
names(datafr)

datafr

datafr$date <- strptime(datafr$V1,format="%d.%m.%Y %H:%M:%S")
datafr

然后您可以根据需要重命名列。

答案 1 :(得分:0)

提问者方法非常有效,只需稍作调整即可。 添加了 from 类并使用了 as.POSIXct 而不是 as.DateDate 类表示 作为自 1970-01-01 以来的天数,这意味着:没有时间戳。

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

data <- c("15.08.2008 00:00:00,Vienna,bla,142", "23.05.2010 01:00:00,Paris,bla,92")
con <- textConnection(data)
readout <- read.csv(con, colClasses=c('myDate', 'character', 'NULL', 'numeric'), header=FALSE)
print(readout)
#>                    V1     V2  V4
#> 1 2008-08-15 00:00:00 Vienna 142
#> 2 2010-05-23 01:00:00  Paris  92

reprex package (v1.0.0) 于 2021 年 2 月 19 日创建