[程式] R 計算年齡的詭異問題

看板Statistics作者 (賽亞人的驕傲)時間14年前 (2011/11/28 12:42), 編輯推噓0(0018)
留言18則, 4人參與, 最新討論串1/1
------------------------------------------------------------------------ [軟體程式類別]: 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

11/28 12:49, , 1F
19XX 是啥?
11/28 12:49, 1F

11/28 13:01, , 2F
19XX年
11/28 13:01, 2F

11/28 13:02, , 3F
想說把人家的出生年月日直接po出來不太好,所以就...
11/28 13:02, 3F

11/28 13:26, , 4F
想太多 前不搭山後不搭廟的 data直接po出來吧 po這樣看不懂
11/28 13:26, 4F
改好了~ 其實就是兩個日期換算成天數之後相減卻算不出來 其他資料都可以,但就是出現了4/1跟5/1的結果會出現 NA 謝謝~ ※ 編輯: realmiddle 來自: 140.109.74.80 (11/28 14:04)

11/28 14:34, , 5F
as.numeric(as.Date("1985-06-01")-as.Date("1984-04-01")
11/28 14:34, 5F

11/28 14:34, , 6F
))/365
11/28 14:34, 6F

11/28 14:35, , 7F
)/365 剛剛多一)
11/28 14:35, 7F

11/28 14:36, , 8F
HD[grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",HD)]
11/28 14:36, 8F

11/28 14:36, , 9F
TD[grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",TD)]
11/28 14:36, 9F

11/28 14:37, , 10F
檢查看看哪些資料不符合 strptime() 的格式
11/28 14:37, 10F

11/28 14:38, , 11F
寫錯了, 把HD和TD換成 da$V8 和 da$10
11/28 14:38, 11F

11/28 14:42, , 12F
da$V8[!grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",da$V8)]
11/28 14:42, 12F

11/28 14:42, , 13F
da$10[!grepl("\\d{4,4}[/]\\d{2,2}[/]\\d{2,2}",da$V10)]
11/28 14:42, 13F

11/29 02:58, , 14F
資料格式輸入應該是錯了.
11/29 02:58, 14F

11/29 03:00, , 15F
另, which 是多餘的.
11/29 03:00, 15F

11/29 03:01, , 16F
da$V8[is.na(age)] 這比grep點.
11/29 03:01, 16F

11/29 10:35, , 17F
解決了!感謝眾強者的建議!m(_ _)m
11/29 10:35, 17F

11/29 13:33, , 18F
所以是錯在哪?
11/29 13:33, 18F
文章代碼(AID): #1Eqn4hh9 (Statistics)