2017-12-29 105 views
5

मुझे पता है कि इस तरह के बहुत सारे प्रश्न हैं। लेकिन मैं वही नहीं पूछ रहा हूँ!व्यक्तिगत वर्ष से उम्र की गणना करें जब जन्म वर्ष में केवल दो संख्याएं

मेरी समस्या यह है कि मैंने जिन प्रश्नों को देखा है, उनके पूरे जन्मदिन के साथ जन्मदिन है, fx 04/05/1971 (प्रारूप:% d /% m /% y)।

जन्मदिन अपने डेटा में डेनिश सीपीआर-संख्या (व्यक्तिगत पहचान संख्या) है, और वे इस तरह दिखेगा:

ID 
1901912222 
0110841111 
0404143333 
1602032444 

एनबी: उन तारीखों उदाहरण हैं। मेरे पास हजारों पंक्तियां हैं और यह सभी उम्र के लोगों में 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% मीटर% y

तो अंतिम चार अंक [4 अंक के अनुक्रमिक संख्या] (अनुक्रमिक संख्या) में कुछ जानकारी भी है। वे बताते हैं कि क्या व्यक्ति एफएक्स 3 या 103 वर्ष पुराना है (अब मेरे पास साल नहीं है)। 1-अगर (DATE -

= वर्ष (NOW()):

Birth year and sequential number

मैं अगर यह किसी भी मदद नहीं जानता, लेकिन मैं एक्सेल कोड है: विवरण के लिए छवि देखें (वर्ष (अब()); एमआईडी (डी 12; 3; 2); बाएं (डी 12; 2)) < = अब(); एमआईडी (डी 12; 5; 2) + आईएफ (बाएं (दाएं (डी 12; 4); 1) * 1 < = 3; 1 9 00; आईएफ (और (बाएं (दाएं (डी 12; 4); 1) * 1 = 4; एमआईडी (डी 12; 5; 2) * 1 < = 36); 2000; आईएफ (और (बाएं (अधिकार (डी 12; 4); 1) * 1 = 4; मध्य (D12, 5, 2) * 1> = 37), 1900, (और (बाएं (अधिकार (डी 12; 4); 1) * 1> = 5; बाएं (दाएं (डी 12; 4); 1) * 1 < = 8; एमआईडी (डी 12; 5; 2) * 1 < = 57); 2000; आईएफ (और (बाएं (दाएं (डी 12; 4); 1) * 1> = 5; वाम (आर आईजीएचटी (डी 12; 4); 1) * 1 < = 8; एमआईडी (डी 12; 5; 2) * 1> = 58); 1800; अगर (और (बाएं (दाएं (डी 12; 4); 1) * 1 = 9; एमआईडी (डी 12; 5; 2) * 1 < = 36); 2000 + एमआईडी (डी 12; 5; 2); 1 9 00))))) - 1; एमआईडी (डी 12; 5; 2) + आईएफ (बाएं (दाएं (डी 12; 4); 1) *= 3; 1 9 00; अगर (और (बाएं (दाएं (डी 12; 4); 1) * 1 = 4; एमआईडी (डी 12; 5; 2) * 1 < = 36); 2000; (और (बाएं (अधिकार (डी 12; 4); 1) * 1 = 4; मध्य (D12, 5, 2) * 1> = 37), 1900, (और (बाएं (अधिकार (डी 12; 4); 1) * 1> = 5; बाएं (दाएं (डी 12; 4); 1) * 1 < = 8; एमआईडी (डी 12; 5; 2) * 1 < = 57); 2000; अगर (और (बाएं (दाएं (डी 12; 4); 1) * 1> = 5; बाएं (दाएं (डी 12; 4); 1) * 1 < = 8; एमआईडी (डी 12; 5; 2) * 1> = 58); 1800; अगर (और (बाएं (दाएं (डी 12; 4); 1) * 1 = 9; एमआईडी (डी 12; 5; 2) * 1 < = 36); 2000 + एमआईडी (डी 12; 5; 2); 1 9 00)))))))

मुझे सच में उम्मीद है कि आप इस समस्या के साथ मेरी मदद कर सकते हैं!

उत्तर

4

कठिन हिस्सा आईडी से वास्तविक जन्मतिथि निकालने जा रहा है। निम्नलिखित कार्य 00-36, 37-57, या 58-99 के आधार पर या तो "1 9" या "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 प्रश्न देखें।

संबंधित मुद्दे