your programing

read.xlsx 열에 날짜가 아닌 경우 날짜 읽기 오류

lovepro 2023. 6. 11. 21:24
반응형

read.xlsx 열에 날짜가 아닌 경우 날짜 읽기 오류

xlsx패키지가 날짜를 잘못 읽고 있습니다.저는 여기 있는 모든 유사한 Q를 읽고 인터넷에서 스카우트를 했지만 열에 날짜가 아닌 데이터가 있으면 출처가 변경되는 이 특정 행동을 찾을 수 없습니다.

드롭박스에서 얻을 수 있는 작은 Excel 스프레드시트가 있습니다.

https://www.dropbox.com/s/872q9mzb5uzukws/test.xlsx

세 개의 행, 두 개의 열이 있습니다.첫 번째는 날짜, 두 번째는 숫자입니다.세 번째 행에는 날짜 열에 "총계"가 있습니다.

만약 내가 처음 두 줄에서 읽는다면,read.xlsx그리고 첫 번째 열이 날짜라고 말하고 다음과 같이 작동합니다.

read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("Date","integer"),endRow=2)
          X1 X2
1 2014-06-29 49
2 2014-06-30 46

그것들은 정말로 스프레드시트에 있는 날짜들입니다.세 행을 모두 읽으려고 하면 뭔가 잘못됩니다.

read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("Date","integer"))
          X1    X2
1 2084-06-30    49
2 2084-07-01    46
3       <NA> 89251
Warning message:
In as.POSIXlt.Date(x) : NAs introduced by coercion

정수로 읽으려고 하면 다른 정수가 표시됩니다.

> read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("integer","integer"),endRow=2)
     X1 X2
1 16250 49
2 16251 46
> read.xlsx("./test.xlsx",head=FALSE,1,colClasses=c("integer","integer"))
     X1    X2
1 41819    49
2 41820    46
3    NA 89251

첫 번째 정수는 다음을 사용하여 올바르게 변환됩니다.as.Date(s1$X1,origin="1970-01-01")(Unix epoch) 및 두 번째 정수는 다음을 사용하여 올바르게 변환됩니다.as.Date(s2$X1, origin="1899-12-30")(Excel epoch).1970년을 사용하여 두 번째 로트를 변환하면 2084년 날짜가 나옵니다.

그래서: 제가 뭔가 잘못하고 있나요?정수로 읽는 것이 가장 좋으며, NA가 있으면 Excel epoch를 사용하여 변환하고 그렇지 않으면 Unix epoch를 사용하는 것이 좋습니까?아니면 그것은 버그인가요?xlsx패키지?

xlsx 버전은 버전: 0.5.1입니다.

날짜는 정수로 읽을 수 있으며 나중에 다음을 사용하여 날짜로 변환할 수 있습니다.openxlsx::convertToDate()기능.

여기 더 보기

XLConnect꽤나 달콤한 일을 처리할 수 있습니다.

test <- readWorksheetFromFile( "~/Downloads/test.xlsx", sheet = "Sheet1", header = FALSE )
test
                 Col1  Col2
1 2014-06-29 00:00:00    49
2 2014-06-30 00:00:00    46
3         Grand Total 89251

문제는 분명합니다. 첫 번째 열은 혼합형입니다.character그리고.POSIXct.XLConnect각 셀을 정확하게 읽을 수 있지만 열의 모든 셀을 가장 일반적인 유형으로 캐스팅합니다.character이 경우에는

str(test)
'data.frame':   3 obs. of  2 variables:
 $ Col1: chr  "2014-06-29 00:00:00" "2014-06-30 00:00:00" "Grand Total"
 $ Col2: num  49 46 89251

당신이 겪고 있는 문제는 엑셀이 1월 0일부터 1900년까지의 일수를 저장하고 있다는 것이고, 그것은 R이 엑셀 파일에서 읽고 있는 숫자입니다.R로 변환할 때는 1월 1일부터 1970년까지의 일수를 기준으로 변환하는 것입니다.그 둘 사이의 일수를 먼저 빼면 효과가 있을 겁니다.

언급URL : https://stackoverflow.com/questions/25158969/read-xlsx-reading-dates-wrong-if-non-date-in-column

반응형