作者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