R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]

Posted

技术标签:

【中文标题】R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]【英文标题】:R - check if NA exists in any column of r dataframe row, then if so remove that row [duplicate]R - 检查 r 数据框行的任何列中是否存在 NA,如果存在,则删除该行 [重复] 【发布时间】:2016-12-19 19:46:58 【问题描述】:

我有一个包含许多行和列的大型数据框,我想删除至少 1 列为 NA / NaN 的行。下面是我正在使用的数据框的一个小示例:

  team_id athlete_id GP tm_STL tm_TOV   player_WS
1   13304      75047  1      2      8         NaN
2   13304      75048  1      2      8  0.28563827
3   13304      75049  1      2      8         NaN
4   13304      75050  1      2      8         NaN
5   13304      75053  1      2      8  0.03861989
6   13304      75060  1      2      8 -0.15530707

...尽管是一个不好的例子,因为在这种情况下,所有的 NaN 都显示在最后一列中。我熟悉which(is.na(df$column_name)) 的方法,用于从单个列中获取具有 NA 值的行,但再次想要对数据帧的一行中至少有 1 列具有 NA 值的行执行类似的操作。

谢谢!

【问题讨论】:

na.omitcomplete.cases 【参考方案1】:

尝试使用complete.cases

> df <- data.frame(col1 = c(1, 2, 3, NA, 5), col2 = c('A', 'B', NA, 'C', 'D'),
             col3 = c(9, NaN, 8, 7, 6))
> df
  col1 col2 col3
1    1    A    9
2    2    B  NaN
3    3 <NA>    8
4   NA    C    7
5    5    D    6
> df[complete.cases(df), ]
  col1 col2 col3
1    1    A    9
5    5    D    6

【讨论】:

complete.cases 应该比其他的更快【参考方案2】:

na.omit 工作:

na.omit(df)
##   team_id athlete_id GP tm_STL tm_TOV   player_WS
## 2   13304      75048  1      2      8  0.28563827
## 5   13304      75053  1      2      8  0.03861989
## 6   13304      75060  1      2      8 -0.15530707

如果您使用管道,它比 complete.cases 更方便一点,因为它不需要像 dplyr::filtermagrittr::extract[ 这样的子集函数。

【讨论】:

【参考方案3】:

你可以使用它。

df[rowSums(is.na(df))==0,]

#  team_id athlete_id GP tm_STL tm_TOV   player_WS
#2   13304      75048  1      2      8  0.28563827
#5   13304      75053  1      2      8  0.03861989
#6   13304      75060  1      2      8 -0.15530707

这样可以计算每行的 NA 数量。您只保留非 NA 的总和为零的行。

【讨论】:

以上是关于R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查熊猫数据框行在各个列中是不是具有某些值,可扩展性

如何编写 R 脚本来检查直线;即,对于任何给定的行,一组列中的所有值是不是具有相同的值

数据框行和列是不是包含字符串?如果是这样,则在新列中返回该字符串

排除列中所有行的前缀(R 软件)

检查VBA中的列中是不是存在值

与 Excel 中的 sumif 函数等效的简洁 R 代码 - 特别适用于数据框行