Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R在执行ifelse比较时处理NA值_R_If Statement_Na - Fatal编程技术网

R在执行ifelse比较时处理NA值

R在执行ifelse比较时处理NA值,r,if-statement,na,R,If Statement,Na,如何告诉>和%mutate(counting=sum(c(年龄>5岁60分

如何告诉>和<运算符忽略NA值?下面的代码返回第一行的NA。我希望它返回0,因为该行的两个条件都失败

##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()