R在执行ifelse比较时处理NA值
如何告诉>和<运算符忽略NA值?下面的代码返回第一行的NA。我希望它返回0,因为该行的两个条件都失败R在执行ifelse比较时处理NA值,r,if-statement,na,R,If Statement,Na,如何告诉>和%mutate(counting=sum(c(年龄>5岁60分
##sum by values
df <- data.frame(sex=c('M','F','M'),occupation=c('Student','Analyst','Analyst'),age=c(NA,6,9), marks=c(34,65,21))
df
#df$counting <- ifelse(df$age > 5 & df$age < 8, 1, 0)
df$counting <- ifelse(df$age > 5 & df$age < 8, 1, 0)+ifelse(df$marks > 60 & df$marks < 70, 1, 0)
df
##按值求和
df 60和df$标记<70,1,0)
df
请参阅以下SO帖子:
关于你的问题:
df$counting <- ifelse(df$age > 5 & df$age < 8 & !is.na(df$age), 1, 0) + ifelse(df$marks > 60 & df$marks < 70, 1, 0)
> df
sex occupation age marks counting
1 M Student NA 34 0
2 F Analyst 6 65 2
3 M Analyst 9 21 0
df$counting 5和df$age<8&!is.na(df$age),1,0)+ifelse(df$marks>60和df$marks<70,1,0)
>df
性别职业年龄分数计算
1米学生NA 34 0
2楼分析员6 65 2
300万分析员9210
您也可以使用cut
或findInterval
df$counting <- colSums(rbind(cut(df$age, c(5,8), labels=F),cut(df$marks, c(60,70), labels=F)), na.rm=T)
df
# sex occupation age marks counting
#1 M Student NA 34 0
#2 F Analyst 6 65 2
#3 M Analyst 9 21 0
df$counting良好做法是在进行任何分析之前清理数据集。因此,尝试通过使用其他值输入或使用0
删除所有NAs。这里有一个dplyr解决方案df=df%%>%groupby_-all()%%>%mutate(counting=sum(c(年龄>5岁<8岁,分数>60分<70分),na.rm=T))%%ungroup()