过滤器从 tibble 中删除 NA 字符串或值



在这里,我试图从tibble中删除NA值:

mc = as_tibble(c("NA" , NA , "ls", "test"))
mc <- filter(mc , is.na == TRUE)

但是返回错误:

> mc = as_tibble(c("NA" , NA , "ls", "test"))
> mc <- filter(mc , is.na == TRUE)
Error in filter_impl(.data, quo) : 
Evaluation error: comparison (1) is possible only for atomic and list types.

如何从这个 tibble 中删除 NA 值?

尝试:

library(tidyverse)
mc %>% 
  mutate(value = replace(value, value == "NA", NA)) %>% 
  drop_na()

这给了:

# A tibble: 2 x 1
  value
  <chr>
1    ls
2  test

第二行将所有"NA"替换为实际<NA>。然后第三行删除所有<NA>值。

如果您只想删除实际的 NA 值:

library(dplyr)
filter(mc, !is.na(value))

或者(这将检查所有列,而不仅仅是上面的指定列):

na.omit(mc)

如果要删除 NA 值和等于字符串"NA"的值:

library(dplyr)
filter(mc, !is.na(value), !value == "NA")

@tyluRp和@danh给出的解决方案工作得很好。

只是想添加另一个具有优势的替代解决方案

  • 更简单的代码
  • 更短 - 对于像我这样的懒惰者:)

请参阅此单行:

mc %>% replace(. == "NA", NA) %>% na.omit

最新更新