gpt4 book ai didi

r - 当出生年份只有两个数字时,从个人数字计算年龄

转载 作者:行者123 更新时间:2023-12-04 19:28:45 25 4
gpt4 key购买 nike

我知道有很多类似的问题。但我不是在问同样的问题!

我的问题是我看过的所有问题都有全年的生日,fx 04/05/1971(格式:%d/%m/%Y)。

我的数据中的生日是丹麦的 CPR 号码(个人识别号码),它们看起来像这样:

   ID
1901912222
0110841111
0404143333
1602032444

注意:这些日期是示例。我有数千行,而且是所有年龄段的人,也都在 100 以上(但通常不超过 17 行)。

第一个和第二个数字:出生日期
第三和第四个数字:出生月份
第 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位数的序号]

所以最后四位数字(序号)也有一些信息。他们会告诉这个人是 3 岁还是 103 岁(现在我没有年份)。
见图片说明:

Birth year and sequential number

我不知道这是否有帮助,但我有 Excel 代码:

=YEAR(NOW())-1-IF(DATE(YEAR(NOW());MID(D12;3;2);LEFT(D12;2))<=NOW();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);2000;IF(AND(LEFT(RIGHT(RIGHT(D12;4);1)*1=4;MID(D12;5;2)*1>=37);1900;IF(AND) (左(右(D12;4);1)*1>=5;左(右(D12;4);1)*1<=8;中(D12;5;2)*1<=57); 2000;IF(AND(左(右(D12;4);1)*1>=5;左(右(D12;4);1)*1<=8;MID(D12;5;2)*1 >=58);1800;IF(AND(LEFT(RIGHT(D12;4);1)*1=9;MID(D12;5;2)*1<=36);2000+MID(D12;5; 2);1900))))))-1;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);2000;IF(AND(LEFT(RIGHT(D12;4);1)*1=4;中(D12;5;2)*1>=37);1900;IF(AND(LEFT(RIGHT(RIGHT(D12;4);1)*1>=5;LEFT(RIGHT(D12;4);1)* 1<=8;MID(D12;5;2)*1<=57);2000;IF(AND(LEFT(RIGHT(D12;4);1)*1>=5;LEFT(RIGHT(D12;4) );1)*1<=8;MID(D12;5;2)*1>=58);1800;IF(AND(LEFT(RIGHT(RIGHT(D12;4);1)*1=9;MID(D12) ;5;2)*1<=36);2000+MID(D12;5;2);1900)))))))

我真的希望你能帮我解决这个问题!

最佳答案

困难的部分是从 id 中提取实际的出生日期。以下函数通过创建三个数组来查找“19”或“20”,具体取决于年份是 00-36、37-57 还是 58-99。它以标准格式返回日期 "yyyy-mm-dd" :

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 位数年份格式获得生日,就很容易例如计算年龄。见 this题。

关于r - 当出生年份只有两个数字时,从个人数字计算年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48022307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com