我有一大堆代码,我经常运行以读取并清理a.csv文件。清理过程的一部分是识别日期列并将它们转换为正确的格式,我使用函数(见下文)。我将日期格式设置为"%d/%m/%Y"
,因为这是我在MS Excel(Office 2010)中查看时在.csv文件中的显示方式。
> convert.dates
function(data, datestring, excludestring=NULL, extradatecols=NULL, dateformat) {
if(is.null(extradatecols)) {datecols1 <- grep(datestring, names(data), value=TRUE)} else {datecols1 <- c(grep(datestring, names(data), value=TRUE), extradatecols)}
if(is.null(excludestring)) {datecols2 <- datecols1} else {datecols2 <- datecols1[-grep(excludestring, datecols1)]}
data[, datecols2] = data.frame(lapply(data[, datecols2], as.Date, format=dateformat), stringsAsFactors=FALSE)
data
}
我最近升级到R 3.2.3并将我的R Studio更新为版本0.99.489。
更新后,我的功能无法转换日期,尽管选择了正确的格式(基于我在.csv文件中看到的内容)。在进一步检查时,read.csv
已将我的日期从我在.csv文件中观察到的"%d/%m/%Y"
格式转换为"%Y-%m-%d"
,并将其存储为一个因素。然后,我能够使用"%Y-%m-%d"
格式应用我的convert.dates函数,并且它有效。
> str(mydata$dob)
Factor w/ 3069 levels "1960-01-15" "1977-05-03" "2014-01-19" NA NA ...
> mydata <- convert.dates(data = gdw, datestring = "date", excludestring = NULL, extradatecols = c("dob"), dateformat = "%Y-%m-%d")
> str(mydata$dob)
Date[1:5000], format: "1960-01-15" "1977-05-03" "2014-01-19" NA NA ...
如果现在这是read.csv的预期行为,这不是什么大问题,但我在发行说明中找不到任何关于此的内容,所以只是想检查 - read.csv应该识别任何内容%d/%m/%Y
格式并在阅读时将其转换为%Y-%m-%d
,或者这与MS Excel在查看.csv文件时自动转换日期显示有关(尽管它们实际编写的方式可能是不同)? .csv文件是从postgres数据库下载的。我不确定原始数据库中通常的日期格式是什么。
非常感谢任何见解。