2017-06-28 73 views
1

我想從eeptools中使用age_calc()來計算出生在數據框df中的年齡。有eeptools的age_calc()處理NA明智

df <- structure(list(date = structure(c(5127, 7670, 10592, 9879, 6097, 
7947, NA, 4520, 10075, 9314), class = "Date"), var = c(1L, 1L, 
1L, 1L, 1L, 0L, 0L, 1L, 2L, 1L)), .Names = c("date", "var"), 
row.names = 1:10, class = "data.frame") 

#   date var 
# 1 1984-01-15 1 
# 2 1991-01-01 1 
# 3 1999-01-01 1 
# 4 1997-01-18 1 
# 5 1986-09-11 1 
# 6 1991-10-05 0 
# 7  <NA> 0 
# 8 1982-05-18 1 
# 9 1997-08-02 2 
# 10 1995-07-03 1 

我運行這行代碼來計算從今天開始的年數。

ages <- age_calc(df$date, units = "years") 

但是,由於NA引發此錯誤。

Error in if (any(enddate < dob)) { : 
    missing value where TRUE/FALSE needed 

有什麼辦法讓age_calc()處理NAs更好嗎?例如,只需忽略它們並輸出一個NA。我做了一個解決方法,但它是駭人而醜陋的。我最終將所有的NAs更改爲1000-01-01,計算年齡,然後再次用NAs替換它們。

回答

1

使用na.omitNA

ages <- age_calc(na.omit(df$date), units = "years") 
df$ages[!is.na(df$date)] <- ages 

     date var  ages 
1 1984-01-15 1 33.44932 
2 1991-01-01 1 26.48767 
3 1999-01-01 1 18.48767 
4 1997-01-18 1 20.44110 
5 1986-09-11 1 30.79452 
6 1991-10-05 0 25.72877 
7  <NA> 0  NA 
8 1982-05-18 1 35.11233 
9 1997-08-02 2 19.90411 
10 1995-07-03 1 21.98630 
+0

感謝。這是一個更好的方法來做到這一點。 –