我有一大堆代码,我经常运行以读取并清理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数据库下载的 . 我不确定原始数据库中日常的日期格式是什么 .

任何见解都将非常感激 .