为什么 summary(a_categorical_var) 不显示 "NA" 计数?

3

我想检查我的数据集-航班,并使用summary()函数。

summary(flights["tailnum"])

结果:

   tailnum         
 Length:336776     
 Class :character  
 Mode  :character  

特别地,它并没有表明字符变量 tailnum 中是否有任何缺失值。

然而,当我使用 sum(is.na(flights$tailnum)) 时,它显示有缺失值。

[1] 2512

什么是检查分类变量的最佳函数 - 显示其级别、缺失值、总行数和每个级别的频率?

1
如果您查看summary.default的源代码(它被summary.data.frame使用),它会特别查找数字数据中的NA,而不会在其他类别中查找。这是不一致的。您是否考虑编写自己的函数,作为summary的几乎副本,以便将其添加到输出中? - r2evans
这似乎是不一致的(可能值得在r-devel上讨论)。我想其中一些原因是字符向量在统计分析中几乎从未被使用,除非首先(有时是隐式地)将它们转换为因子... - Ben Bolker
1个回答

0

显然,对于字符变量,summary()方法不会报告NAs。(这似乎有点不一致,可能值得在r-devel@r-project.org邮件列表上报告/讨论...)

如果将变量转换为因子,并特别应用summary(),则会得到前98个级别的计数表(后跟一个“其他”类别和NA的数量)。

summary(factor(flights$tailnum))

如果你真的想要完整的制表:
tt <- table(flights$tailnum, useNA = "ifany")
print(tt)

尽管 length(tt) 是4044,告诉你有4043个不同的非NA值(+ NA 值): head(table(tt))tail(table(tt)) 告诉你有数百个值只出现了几次,还有一些值出现了几百(或几千)次。

如果您正在使用tidyverse并希望将所有字符变量转换为因子:

flights %>% mutate(across(where(is.character), factor))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接