2016-07-21 3 views
0

으로 변환 중 날짜 열을 R의 Date 개체로 변환하려고했지만 원하는 결과를 얻지 못했습니다. 이 개인은 1970 년 1 월 1 일 이전의 생년월일이 있으므로 as.Date R은 1/12/54와 같은 날짜를 2054-01-12로 변환합니다. 이 문제를 어떻게 해결할 수 있습니까? 정말 고마워.1970 년 1 월 1 일 이전의 날짜를 R

+3

무엇이 옳은지 어떻게 결정할 수 있습니까? '1/1/16'의 경우 : 2016 또는 1916입니까? – Christoph

+0

@christoph "69"다음의 2 자리 연도는 ** 18 ** 70이어야합니다. – Spacedman

답변

2

모든 것이 1900 년대라면, 한 줄짜리 - 시작시 두 자리 연도로 포맷하고 앞면에 19를 치고 날짜로 변환하십시오. 다시. 사람이 몇 %> % 물건을 냉각 보일 것이다

s = c("1/12/54","1/12/74") 
as.Date(format(as.Date(s,format="%d/%m/%y"), "19%y%m%d"), "%Y%m%d") 
# [1] "1954-12-01" "1974-12-01" 

이 "69"에서 년에 "99"은 여기에 또 한 줄의, 1800 있습니다 : 철저 그래서 테스트하지

library(dplyr) # for pipe operator: 
s %>% as.Date(format="%d/%m/%y") %>% 
    format("%y%m%d") %>% 
    (function(d){ 
     paste0(ifelse(d>700101,"18","19"),d) 
     }) %>% 
    as.Date("%Y%m%d") 

## [1] "1954-12-01" "1874-12-01" 

참고 하나씩 오류가 있거나 몇 달이나 며칠이 섞여있어 야합니다. ISO8601 Compliant

+0

'%> %에 의한 창조적 파괴만을위한 Upvote. –

+0

이것은 정확히 내가 필요한 것입니다. – user122514

1

내가 할 것 :

library(lubridate) 

x <- as.Date("1/12/54", format = "%m/%d/%y") 
year(x) <- 1900 + year(x) %% 100 

> x 
[1] "1954-01-12" 
+0

은 연중 계속 된 날짜 = "70"에 실패합니다. OP 상태는 1970-01-01 이전이기 때문에 "1/12/74"는 ** 1874 ** – Spacedman

+0

이어야합니다. 분명히 이것을 벡터에 적용하려면 더 강력한 솔루션이 필요하지만 OP가 ' ifelse' 또는 두 사람이 제공 한 도구를 사용하여 거기에 도착하십시오! –

+0

답변 해 주셔서 감사합니다. :-) – user122514

4

필요가 없습니다를 추가 기능 패키지, 기본 R은 괜찮습니다. 당신이 기본이 아닌 포맷을해야하는 경우

R> as.Date("1954-01-12") 
[1] "1954-01-12" 
R> 

, 그냥 그들을 지정 :하지만 당신은 세기를 지정해야

R> as.Date("19540112", "%Y%m%d") 
[1] "1954-01-12" 
R> 

편집 : 데이터가 정말 %y% 형식을 사용하여 온 경우,

R> d <- as.Date("540112", "%y%m%d") 
R> dlt <- as.POSIXlt(d) 
R> dlt$year <- dlt$year - 100 
R> as.Date(dlt) 
[1] "1954-01-12" 
R> 
: 및 당신이 19 세기가 을 필요로하는 정책 결정을하는 일이 여기 그것을하는 하나의 기본 R의 방법입니다
+0

나는이 답이 OP를 돕지 않는다고 생각한다. 왜냐하면 세기를 "지정"하는 방식, 즉 문자열 ** 벡터 ** 형식의 "% m/% d/% y "에서"% m/% d/% Y "로 변경하십시오. 나는 OP가'as.Date ("1954-01-12")'가 그/그녀에게 필요한 것을 주겠지 만, 그/그녀는 그 형식을 가지고 있지 않다는 것을 알고 있다고 확신한다. –

+0

나는 그것을하기위한 기본 R 방식을 추가했다. 추가 기능이 필요 없습니다. –

+0

더 좋아 보인다! –

관련 문제