gpt4 book ai didi

r - 将日期从 Excel 转换为 R

转载 作者:行者123 更新时间:2023-12-03 02:48:17 25 4
gpt4 key购买 nike

我在将日期从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com