R仅在特定列中没有NA的行上起作用

问题描述 投票:0回答:3

我想用age_calc图书馆的eeptools计算出生日期的年龄:

data1$AGE <- floor(age_calc(as.Date(data1$BIRTH), units = "years"))

如何使该函数省略BIRTH没有值的行?否则它返回:

Error in if (any(enddate < dob)) { : 
  missing value where TRUE/FALSE needed
r na
3个回答
1
投票

使用na.omit删除具有NA值的删除案例并创建名为dataNoNA的新表。您必须在dataNoNA上执行以下操作,因为尺寸将与data1不同。

dataNoNA <- na.omit(data1)
dataNoNA$AGE <- floor(age_calc(as.Date(dataNoNA$BIRTH), units = "years"))

0
投票

你可以使用complete.cases函数

birth<-complete.cases(data1$BIRTH)
data1$AGE <- floor(age_calc(as.Date(birth), units = "years"))

0
投票

尝试使用tidyverse:

library(eeptools)
library(tidyverse)

# test data
data(stuatt)

# create NA's in a birth column
stuatt <- mutate(stuatt, birth = as.Date(birth_date, origin = "1960/01/01"))

stuatt <- group_by(stuatt, sid) %>%
      mutate(age = ifelse(is.na(birth), birth, 
                age_calc(as.Date(birth), units = "years")))
View(stuatt)

它将保留数据框中的所有值 - 保留缺失值。

HTH - 詹姆斯

© www.soinside.com 2019 - 2024. All rights reserved.