作者realmiddle (赛亚人的骄傲)
看板Statistics
标题[程式] R 计算年龄的诡异问题
时间Mon Nov 28 12:42:15 2011
------------------------------------------------------------------------
[软体程式类别]:
R
[程式问题]:
时间日期换算
[软体熟悉度]:
低(1~3个月)
[问题叙述]:
小弟在计算年龄的时候出现奇怪的问题
因为我拿到的资料是出生年月日和观测终止的时间
所以计算年龄的时候需要换算
於使写了下面这个小程式
HD <- strptime(da$V8, "%Y/%m/%d")
TD <- strptime(da$V10, "%Y/%m/%d")
age <- round((HD-TD)/365.25, digits = 0)
原始资料里只有一笔 NA 值
但程式跑完後却意外多了10笔 NA 值
把矩阵中 NA 的位置调出来看
> HD[which(is.na(age))]
[1] "1992-03-03" "1991-10-15" "1991-11-09" "1991-12-14" "1991-08-24"
"1991-03-09" "1992-12-12" "1992-05-08" "1992-07-10" "1991-07-22"
> TD[which(is.na(age))]
[1] "1954-04-01" "1956-04-01" "1953-04-01" "1956-04-01" NA
"1949-05-01" "1945-05-01" "1956-04-01" "1956-04-01" "1951-05-01"
发现竟然都是出现在4月1日跟5月1日的地方
试了好久完全不知道怎麽解决......orz
-----------------------------------------------------------------------------
请问有没有高手知道这到底是怎麽回事
谢谢~
--
再示范一次标题地雷杀人法:
下邳城曹操鏖兵 白门楼吕布殒命
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.74.80
1F:→ clickhere:19XX 是啥? 11/28 12:49
2F:→ realmiddle:19XX年 11/28 13:01
3F:→ realmiddle:想说把人家的出生年月日直接po出来不太好,所以就... 11/28 13:02
4F:→ gsuper:想太多 前不搭山後不搭庙的 data直接po出来吧 po这样看不懂 11/28 13:26
改好了~
其实就是两个日期换算成天数之後相减却算不出来
其他资料都可以,但就是出现了4/1跟5/1的结果会出现 NA
谢谢~
※ 编辑: realmiddle 来自: 140.109.74.80 (11/28 14:04)
5F:→ rockken:as.numeric(as.Date("1985-06-01")-as.Date("1984-04-01") 11/28 14:34
6F:→ rockken:))/365 11/28 14:34
7F:→ rockken:)/365 刚刚多一) 11/28 14:35
8F:→ gsuper:HD[grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",HD)] 11/28 14:36
9F:→ gsuper:TD[grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",TD)] 11/28 14:36
10F:→ gsuper:检查看看哪些资料不符合 strptime() 的格式 11/28 14:37
11F:→ gsuper:写错了, 把HD和TD换成 da$V8 和 da$10 11/28 14:38
12F:→ gsuper:da$V8[!grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",da$V8)] 11/28 14:42
13F:→ gsuper:da$10[!grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",da$V10)] 11/28 14:42
14F:→ clickhere:资料格式输入应该是错了. 11/29 02:58
15F:→ clickhere:另, which 是多余的. 11/29 03:00
16F:→ clickhere:da$V8[is.na(age)] 这比grep点. 11/29 03:01
17F:→ realmiddle:解决了!感谢众强者的建议!m(_ _)m 11/29 10:35
18F:→ gsuper:所以是错在哪? 11/29 13:33