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 替换了文本 NA,见下文。
# 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 包于 2021-10-26 创建 (v2.0.0 )
base::droplevels
上面在评论中建议的功能当然是一样的!不过,我非常喜欢forcats
习惯于处理因素和水平的软件包。
推荐阅读
- cygwin - 在 Cygwin 上构建 opnMPI
- android - Android Studio 模拟器:进程以退出代码 3 结束
- c# - 将 wsdl 文件导入 C# WCF 项目,并公开 wsdl 合同
- javascript - 反应:在 Div 上设置 scrollTop 在特定情况下不起作用
- android - 如何在圆形 ProgessBar 内覆盖 imageView
- c# - SqlException:无效的对象名称“产品”。处于生产模式但处于开发模式时
- hive - Parquet 二进制 UTF8 作为 hive 上的字符串
- javascript - 将参数从一个函数传递到另一个函数
- facebook - Facebook 分享产品
- android - 匹配保存在数据库中的图像