r - 将日期从 Excel 转换为 R

标签 r excel date

我在将日期从 excel(从 csv 读取)转换为 R 时遇到困难。非常感谢您的帮助。

这就是我正在做的事情:

df$date = as.Date(df$excel.date, format = "%d/%m/%Y")

但是,有些日期会被转换,但有些则不会。这是输出:

head(df$date)
[1] NA           NA           NA           "0006-01-05" NA           NA 

从 csv 文件导入的前 5 个条目如下:

7/28/05
7/28/05
12/16/05
5/1/06
4/21/05

这是输出:

head(df$excel.date)
[1] 7/28/05  7/28/05  12/16/05 5/1/06   4/21/05  1/25/07 
1079 Levels: 1/1/00 1/1/02 1/1/97 1/10/96 1/10/99 1/11/04 1/11/94 1/11/96 1/11/97 1/11/98 ... 9/9/99

str(df)
.
.
$ excel.date   : Factor w/ 1079 levels "1/1/00","1/1/02",..: 869 869 288 618 561 48 710 1022 172 241 ...

最佳答案

首先,请确保文件中的日期格式明确,使用完整年份(而不仅仅是最后 2 个数字)。 %Y 表示“有世纪的年份”(请参阅?strptime),但您似乎没有世纪。因此,您可以使用 %y(风险自负,请再次参阅 ?strptime)或在 Excel 中重新设置日期格式。

在读取这些数据时,将 as.is=TRUEread.csv 一起使用也是一个好主意 - 否则字符向量将转换为可以导致意想不到的结果。

在 Wndows 上,使用 RODBC 直接从 xlsxlsx 文件读取日期可能会更容易。

(编辑)

以下内容可能会给出提示:

> as.Date("13/04/2014", format= "%d/%m/%Y")
[1] "2014-04-13"
> as.Date(factor("13/04/2014"), format= "%d/%m/%Y")
[1] "2014-04-13"
> as.Date(factor("13/04/14"), format= "%d/%m/%Y")
[1] "14-04-13"
> as.Date(factor("13/04/14"), format= "%d/%m/%y")
[1] "2014-04-13"

(因此 as.Date 实际上可以处理因子 - 魔法发生在 as.Date.factor 方法中,定义为:

function (x, ...)  as.Date(as.character(x), ...)

将日期表示为因子并不是一个好主意,但在这种情况下也不是问题。我认为问题出在 excel 上,它会在 CSV 文件中将您的年份保存为 2 位数字,而不询问您。)

-

?strptime 帮助文件指出,使用 %y 是特定于平台的 - 您可以在不同的计算机上得到不同的结果。因此,如果无法返回源并以更好的方式保存 csv,您可以使用如下内容:

x <- c("7/28/05", "7/28/05", "12/16/05", "5/1/06", "4/21/05", "1/25/07")

repairExcelDates <- function(x, yearcol=3, fmt="%m/%d/%Y") {
 x <-  do.call(rbind, lapply(strsplit(x, "/"), as.numeric))
 year <- x[,yearcol]
 if(any(year>99)) stop("dont'know what to do")
 x[,yearcol] <- ifelse(year <= as.numeric(format(Sys.Date(), "%Y")), year+2000, year + 1900) 
 # if year <= current year then add 2000, otherwise add 1900
 x <- apply(x, 1, paste, collapse="/")
 as.Date(x, format=fmt)
 }

repairExcelDates(x)
# [1] "2005-07-28" "2005-07-28" "2005-12-16" "2006-05-01" "2005-04-21"
# [6] "2007-01-25"

关于r - 将日期从 Excel 转换为 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23037089/

相关文章:

r - 如何通过长/纬度值过滤 sfc 多边形?

r - `smooth.spline` 严重欠拟合长(周期)时间序列

sql-server - 无法在 Excel 中使用传递查询

iOS4 : DateFormatter return NULL

javascript - Date.parse 在 Apps 脚本中返回 NaN

r - 从字符串调用 data.frame

r - 使用 RCurl(或任何其他方法)从 FTP 下载 .RData 和 .csv 文件

vba - 获取打开的工作簿的工作表名称

mysql - 使用 MySQL Administrator 导入数据

mysql - 查找mysql中每个 `key'列具有第二大日期的每条记录?