使用 NA、Inf、-Inf 和 NaN,我们可以表示 4 类数字缺失值。下面我们展示了 NA 与 Inf 的使用,然后是 NA 与 NaN 的使用。在第三种方法中,我们讨论 naniar 包的使用。
1) Recode q2
Yes、No、结构缺失和缺失的值分别为 1、0、Inf 和 NA。注意is.na(x)
只会针对实际 NA 报告 TRUE,is.infinite(x)
只会针对 Inf 报告 TRUE,并且!is.finite(x)
如果您需要执行测试,将针对 NA 或 Inf 报告 TRUE。可以选择重新编码输出。
df %>%
count(q2 = recode(q2, Yes = 1, No = 0, .missing = ifelse(q1 == "No", Inf, NA)))
giving:
# A tibble: 3 x 2
# Groups: q2 [3]
q2 n
<dbl> <int>
1 1 1
2 Inf 2
3 NA 1
2)其变体是使用 NaN 代替 Inf。在这种情况下测试可以使用is.na(x)
, is.nan(x)
and !is.finite(x)
df %>%
count(q2 = recode(q2, Yes = 1, No = 0, .missing = ifelse(q1 == "No", NaN, NA)))
giving:
# A tibble: 3 x 2
q2 n
<dbl> <int>
1 1 1
2 NA 1
3 NaN 2
3)naniar 包可以创建辅助列来定义每个 NA 的类型bind_shadow
。然后我们可以使用以下命令重新编码辅助列recode_shadow
然后在我们的计数中使用它们。
图书馆(纳尼亚尔)
library(naniar)
df %>%
bind_shadow %>%
recode_shadow(q2 = .where(is.na(q2) & q1 == "No" ~ "struct")) %>%
count(q2, q2_NA)
giving:
# A tibble: 3 x 3
q2 q2_NA n
<chr> <fct> <int>
1 Yes !NA 1
2 <NA> NA 1
3 <NA> NA_struct 2