让eeptools的age_calc()明智地处理NAs

时间:2017-06-28 20:48:51

标签: r

我正在尝试使用eeptools中的age_calc()来计算数据框中出生日期的年龄,df。

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()更好地处理NA?例如,只需忽略它们并输出NA。我做了一个解决方案,但它是hackish和丑陋。我最终将所有的NA更改为1000-01-01计算年龄,然后再次用NA替换它们。

1 个答案:

答案 0 :(得分:1)

使用na.omit删除NA

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