在这里,我试图从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