用 na 替换的值仍然显示在 summary() 中
Values replaced with na, are still shown in 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 package (v2.0.0)
于 2021-10-26 创建
上面评论中建议的base::droplevels
函数当然也是一样的!不过,我非常喜欢 forcats
包来习惯处理因素和级别。
这是代码的简化版本:
# 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 package (v2.0.0)
于 2021-10-26 创建上面评论中建议的base::droplevels
函数当然也是一样的!不过,我非常喜欢 forcats
包来习惯处理因素和级别。