2017-12-29 24 views
5

나는 이것과 비슷한 질문이 많음을 알고 있습니다. 그러나 나는 같은 것을 요구하지 않고있다!생년월일에 두 개의 숫자 만있는 경우 개인적인 번호로 나이를 계산하십시오.

내 문제는 내가 살펴본 모든 질문에 fx 2003 년 4 월 5 일 (형식 : % d/% m/% Y)의 전체 생일과 함께 생일이 있다는 것입니다. 내 데이터

생일 덴마크 CPR-번호 (개인 식별 번호), 그리고 그들은 다음과 같이 :

ID 
1901912222 
0110841111 
0404143333 
1602032444 

NB : 그 날짜 예입니다. 저는 수천 개의 행을 가지고 있으며 모든 연령대의 사람들입니다. 또한 100을 넘는 사람들도 있지만 (대개는 17 개를 초과하지 않는 경우도 있습니다).

1 차 및 2 차 번호 : 출생 의 일 3, 4 수 : 출생의 달 5, 6 번호 : 출생 마지막 네 = 일련 번호의 년.

ID   birthdate  age 
1901912222 19/09/91  26 
0110841111 01/10/84  33 
0404143333 04/04/14  103 
1602024444 16/02/02  15 

그래서 형식은 :

그래서이 날 생일 (및 나이)를 제공 %의 D %의 m의 %의 Y

그래서 마지막 네 자리 [4 자리수의 일련 번호] (일련 번호)에는 몇 가지 정보도 있습니다. 그들은 그 사람이 fx 3 살 또는 103 살인지를 말해줍니다 (이제 나는 그 해를 갖지 못했습니다). 1-IF (DATE -

= YEAR (NOW()) :

Birth year and sequential number

가 도움이 있는지 모르겠어요,하지만 난 엑셀 코드를 가지고 : 설명을위한 이미지보기 MID (D12; 5; 2) + IF (LEFT (RIGHT (D12; 4); 1) * 1 < = 3; 1900; IF (AND LEFT (RIGHT (D12; 4); 1) * 1 = 4; MID (D12; 5; 2) * 1 < = 36); (LEFT (RIGHT (D12; 4); 1) * 1 = 4; MID (D12; 5; 2) * 1> = 37); LEFT (RIGHT (D12; 4); 1) * 1 < = 8; MID (D12; 5; 2) * 1 < = 57);); 1) * 1> = 5; LEFT (R IGHT (D12; 4); 1) * 1 < = 8; MID (D12; 5; 2) * 1> = 58); MID (D12; 5; 2) + IF (LEFT (D12; 5; 2) * 1) (오른쪽 (D12; 4); 1) * 1 = 4; MID (D12; 5; 2) * 1 < = (AND LEFT (RIGHT (D12; 4); 1) * 1 = 4; MID (D12; 5; 2) * 1> = 37); 1) * 1> = 5; LEFT (RIGHT (D12; 4); 1) * 1 < = 8 MID (D12; 5; 2) * 1 < = 57); LEFT (RIGHT (D12; 4); 1) * 1 < = 8; MID (D12; 5; 2) * 1> = 58); 2000 + MID (D12; 5; 2); 1900); AND (LEFT (RIGHT (D12; 4); 1) * 1 = 9; MID (D12; 5; 2) * 1 < =))))))))))

정말이 문제로 나를 도울 수 있기를 바랍니다.

답변

4

어려운 부분은 id에서 실제 생년월일을 추출하고 있습니다. 다음 함수는 연도가 00-36, 37-57 또는 58-99인지 여부에 따라 "19"또는 "20"을 조회 할 세 개의 배열을 작성하여이를 수행합니다.예를 들어

A <- c(rep("19",4),rep("20",6)) 
B <- c(rep("19",5),rep("20",4),"19") 
C <- c(rep("19",5),rep("18",4),"19") 
birthday <- function(code){ 
    day <- substr(code,1,2) 
    month <- substr(code,3,4) 
    year <- substr(code,5,6) 
    snum <- 1+as.numeric(substr(code,7,7)) 
    prefix <- ifelse(as.numeric(year) <= 36,A[snum],ifelse(as.numeric(year)<=57,B[snum],C[snum])) 
    year <- paste0(prefix,year) 
    paste(year,month,day,sep = "-") 
} 

:

df <- data.frame(ID = c("1901912222","0110841111","0404143333","1602024444")) 
df$BD <- birthday(df$ID) 

가 항복 :

  ID   BD 
1 1901912222 1991-01-19 
2 0110841111 1984-10-01 
3 0404143333 1914-04-04 
4 1602024444 2002-02-16 

당신은 표준 4 자리 연도 형식의 생일이되면,을은 표준 형식 "yyyy-mm-dd"에 날짜를 반환 예를 들면 나이 계산. 질문 : this을 참조하십시오.