[英]Converting dates from excel to R
我很難將日期從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 ...
首先,請確保您使用完整的年份(而不只是最后兩個數字)以明確的格式保存文件中的日期。 %Y
表示“有世紀的年份” (請參閱?strptime
),但是您似乎沒有世紀。 因此,您可以使用%y
(風險自負,請再次查看?strptime
)或重新格式化Excel中的日期。
另外,也使用一個好主意as.is=TRUE
與read.csv
在這些數據讀出時-否則字符向量轉換到因素可導致意想不到的結果。
在Wndows上,使用RODBC直接從xls
或xlsx
文件中讀取日期可能更容易。
以下內容可能會提示:
> 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
發生在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"
您的數據格式為月/日/年,因此
df$date = as.Date(df$excel.date, format = "%d/%m/%Y")
應該
df$date = as.Date(df$excel.date, format = "%m/%d/%Y")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.