这是代码的简化版本:
# 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
包,因为它习惯于处理因子和级别。