我想删除此数据框中的行:
 a) 在所有列中包含NA 。下面是我的示例数据框。 
gene hsap mmul mmus rnor cfam
1 ENSG00000208234    0   NA   NA   NA   NA
2 ENSG00000199674    0   2    2    2    2
3 ENSG00000221622    0   NA   NA   NA   NA
4 ENSG00000207604    0   NA   NA   1    2
5 ENSG00000207431    0   NA   NA   NA   NA
6 ENSG00000221312    0   1    2    3    2基本上,我想获得如下的数据框。
gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
6 ENSG00000221312    0   1    2    3    2 b) 只在某些列中包含NA ,所以我也可以得到这个结果: 
gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
4 ENSG00000207604    0   NA   NA   1    2
6 ENSG00000221312    0   1    2    3    2还要检查complete.cases : 
> final[complete.cases(final), ]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
6 ENSG00000221312    0    1    2    3    2 na.omit可以更好地删除所有NA 。 complete.cases允许通过仅包含数据帧的某些列来进行部分选择: 
> final[complete.cases(final[ , 5:6]),]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
4 ENSG00000207604    0   NA   NA    1    2
6 ENSG00000221312    0    1    2    3    2您的解决方案无法运作。如果您坚持使用is.na ,那么您必须执行以下操作: 
> final[rowSums(is.na(final[ , 5:6])) == 0, ]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
4 ENSG00000207604    0   NA   NA    1    2
6 ENSG00000221312    0    1    2    3    2但是使用complete.cases要清晰得多,而且速度更快。 
试试na.omit(your.data.frame) 。至于第二个问题,请尝试将其作为另一个问题发布(为清楚起见)。 
我更喜欢按照以下方式检查行是否包含任何 NA:
row.has.na <- apply(final, 1, function(x){any(is.na(x))})这将返回逻辑向量,其值表示行中是否存在任何 NA。您可以使用它来查看要删除的行数:
sum(row.has.na)并最终放弃他们
final.filtered <- final[!row.has.na,]为了过滤具有某些 NA 的行,它变得有点棘手(例如,你可以将'final [,5:6]'提供给'apply')。一般来说,Joris Meys 的解决方案似乎更优雅。