我正在尝试使用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替换它们。
答案 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