如果R中的Column == NA,则删除整个行

时间:2018-09-08 07:02:56

标签: r na

尝试删除此行,但无法获取它。我已经在SO上尝试了多个Q&A,但似乎没有任何效果。有人建议使用sjmisc库进行尝试,但仍然存在。这是我在下面尝试过的内容以及df的摘录。

编辑:

下面是一个要测试的数据框。删除了数据框的图片,该图片不正确且政策不正确。

df<-data.frame(name=c('CAREY.PRICE',NA,'JOHN.SMITH'),GA=c(3,2,2),SV=c(2,2,NA),stringsAsFactors = FALSE)

哪个会返回:

name       |  GA  | SV
CAREY.PRICE|  3   | 2
NA         |  2   | 2
John.Smith |  2   | NA 

问题与以下响应:

df = df[complete.cases(df),]

它从技术上回答了上面的问题,如果任何行中的列都有NA,请将其删除。我应该澄清一下,我希望它成为我选择的一栏,而该栏应该是NA中的df$name

这将删除NAJohn.Smith。这导致我的脚本出现问题,并且DF中缺少name(玩家)。

我的脚本中也有na.omit(),它也删除了NA和John.Smith。 我的DF中有40个变量,要写出每个可能包含或不包含NA的变量都太多了。我的临时解决方案是将所有NA都更改为0:

df[is.na(df)] <- 0

退货:

name       |  GA  | SV
CAREY.PRICE|  3   | 2
0          |  2   | 2
John.Smith |  2   | 0

然后删除所有为0的df$name

df<-df[!(df$name==0),]

我正在寻找的东西:

name       |  GA  | SV
CAREY.PRICE|  3   | 2
John.Smith |  2   | 0

2 个答案:

答案 0 :(得分:2)

complete. cases查找没有任何NA的行。

因此,您的问题的答案是:

df = df[complete.cases(df),]

答案 1 :(得分:1)

这是一种在name字段中用NA过滤行的方法:

library(dplyr)
df %>% filter(!is.na(name))

#>          name GA SV
#> 1 CAREY.PRICE  3  2
#> 2  JOHN.SMITH  2 NA