r语言 - 被na替换的值仍然显示在summary()中



这是代码的简化版本:

# Packages used
pkg <- c("tidyverse",
"synthpop"
)
tmp1 <- read_csv2(file1)
tmp2 <- read_csv2(file2) 
tmp <- tmp1 %>%
left_join(tmp2) 

我有一个问题,有na的值和文本na值(来自csv文件)。为了解决这个问题,我将文本NA's替换为实际NA's,见下文。

# replacing textual "NA"'s with actual na's that are regonized by R 
tmp <- na_if(tmp, "NA")

但是当运行时:

summary(tmp["Region"])

输出:

Region      
North:19342  
West :91234  
East :48001  
South:43347  
NA   :    0  
NA's :12276  

它仍然显示文本NA作为一个类别,尽管计数为0(它对tmp中的所有变量都这样做)。因此,我在后面的代码中遇到了一些问题。我希望文本NA不再存在(这不是关于输出,而是关于NA作为一个因素的实际存在,我稍后合成数据集,NA和NA不应该被视为两个独立的可能性)。

有什么替代或添加:tmp <- na_if(tmp, "NA"),使此问题不会发生?我希望你能帮助我!

forcats::fct_drop将删除因子中未使用的级别:

library(tidyverse)
df <- tribble(~a, "a", "b", "c", "NA", NA) %>% 
mutate(a = as_factor(a))
df2 <- na_if(df, "NA") %>% 
mutate(a = fct_drop(a))
summary(df2)
#>     a    
#>  a   :1  
#>  b   :1  
#>  c   :1  
#>  NA's:2

由reprex包(v2.0.0)在20121-10-26创建

上面评论中建议的base::droplevels函数当然也做同样的事情!我很喜欢forcats包,因为它习惯于处理因子和级别。

相关内容

  • 没有找到相关文章

最新更新