在read.table/read.csv中为colClasses参数指定自定义日期格式 问题:

在read.table/read.csv中为colClasses参数指定自定义日期格式 问题:,r,date,read.table,read.csv,R,Date,Read.table,Read.csv,在read.table/read.csv中使用colClasses参数时,是否有方法指定日期格式? (我意识到我可以在导入后进行转换,但是有很多这样的日期列,在导入步骤中进行转换会更容易) 例子: 我有一个.csv格式的日期列,格式为%d/%m/%Y dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date")) 以下是输出结果: 您可以编写自己的函数,接受字符串并使用所需格式将其转换为日期,然后

在read.table/read.csv中使用colClasses参数时,是否有方法指定日期格式?

(我意识到我可以在导入后进行转换,但是有很多这样的日期列,在导入步骤中进行转换会更容易)


例子: 我有一个.csv格式的日期列,格式为
%d/%m/%Y

dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
以下是输出结果:


您可以编写自己的函数,接受字符串并使用所需格式将其转换为日期,然后使用
setAs
将其设置为
as
方法。然后,可以将函数用作colclass的一部分

尝试:

setAs(“字符”、“myDate”、函数(from)as.Date(from,format=“%d/%m/%Y”))

tmp如果您只想更改一种日期格式,您可以使用
Defaults
包更改
as.date.character

library(Defaults)
setDefaults('as.Date.character', format = '%d/%M/%Y')
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
str(dataImport)
## 'data.frame':    10 obs. of  3 variables:
##  $ func_loc     : Factor w/ 5 levels "3076WAG0003",..: 1 2 3 3 3 3 3 4 4 5
##  $ order_type   : Factor w/ 3 levels "PM01","PM02",..: 3 3 1 1 1 1 2 2 3 1
##  $ actual_finish: Date, format: "2008-10-15" "2009-10-19" NA "2008-10-11" ...
库(默认值)
setDefaults('as.Date.character',格式='%d/%M/%Y')

数据导入如果您还需要时间:

setClass('yyyymmdd-hhmmss')
setAs("character","yyyymmdd-hhmmss", function(from) as.POSIXct(from, format="%Y%m%d-%H%M%S"))
d <- read.table(colClasses="yyyymmdd-hhmmss", text="20150711-130153")
str(d)
## 'data.frame':    1 obs. of  1 variable:
## $ V1: POSIXct, format: "2015-07-11 13:01:53"
setClass('yyyymmdd-hhmmss'))
setAs(“字符”,“yyyyymmdd hhmmss”,函数(from)as.POSIXct(from,format=“%Y%m%d-%H%m%S”))

d很久以前,哈雷·威克姆就解决了这个问题。因此,现在的解决方案简化为一行:

library(readr)
data <- read_csv("data.csv", 
                  col_types = cols(actual_finish = col_datetime(format = "%d/%m/%Y")))
库(readr)

数据一种黑客的方法是创建自己版本的
read.table
,并添加一个
format
参数,该参数传递给
as.Date
。如果有一种更好的方式我没有想到,我也不会感到惊讶。哇,setAs是一个救命恩人!我以前怎么从未见过这个函数?请注意,您可能会得到一个“类“myDate”没有定义”警告,如中所述。
setMethod('myDate')
应该做什么?运行它只会给我一个错误…@JoshO'Brien,很抱歉应该是
setClass
(现在已修复)。它所做的是防止setAs发出关于“myDate”不作为类存在的警告。警告是无害的,而且一切仍然有效,但是设置类意味着您甚至看不到警告。@MySchizoBuddy,如果您只有一个日期列,并且您只做了一次,那么您用哪种方式做可能无关紧要。但如果数据集中有几列是日期,那么我认为这种方法可能比在阅读后更改每一列更简单。
setClass('yyyymmdd-hhmmss')
setAs("character","yyyymmdd-hhmmss", function(from) as.POSIXct(from, format="%Y%m%d-%H%M%S"))
d <- read.table(colClasses="yyyymmdd-hhmmss", text="20150711-130153")
str(d)
## 'data.frame':    1 obs. of  1 variable:
## $ V1: POSIXct, format: "2015-07-11 13:01:53"
library(readr)
data <- read_csv("data.csv", 
                  col_types = cols(actual_finish = col_datetime(format = "%d/%m/%Y")))
data <- as.data.frame(data)