编辑:公认的答案帮助我摆脱了眼界;这种变化毕竟是一种改进,并不令人讨厌。
table现在,在的帮助文件中:
非因子参数a通过factor(a,exclude = exclude)强制。从R 3.4.0开始,请注意不要对排除的值进行计数(以前将它们包括在NA计数中)。
这很烦人。在此之前,您可以调用table(x, exclude = NULL)并获得对NA数值数量的明确确认。现在,如果没有,则不会被告知。观察:
vec_with_no_nas <- c("A", "B", "B", "C")
vec_with_nas <- c("A", "B", NA, "C")
table(vec_with_no_nas)
table(vec_with_no_nas, exclude = NULL)
table(vec_with_nas)
table(vec_with_nas, exclude = NULL)
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
> table(vec_with_no_nas)
vec_with_no_nas
A B C
1 2 1
> table(vec_with_no_nas, exclude = NULL)
vec_with_no_nas
A B C
1 2 1
Run Code Online (Sandbox Code Playgroud)
看到?没有明确确认零个NA。
我真正想要的是类似旧行为的东西:
> table(vec_with_no_nas, exclude = NULL)
vec_with_no_nas
A B C <NA>
1 2 1 0
Run Code Online (Sandbox Code Playgroud)
FWIW,如果向量确实具有NA值,table(x, exclude = NULL)则会告诉您:
> table(vec_with_nas)
vec_with_nas
A B C
1 1 1
> table(vec_with_nas, exclude = NULL)
vec_with_nas
A B C <NA>
1 1 1 1
Run Code Online (Sandbox Code Playgroud)
我在基地和基地工作tidyverse。是否有table可以直接确认没有NA的直接替换产品?
您可以尝试将useNA参数设置为“ always”。在R 3.2.5中,
table(vec_with_no_nas, useNA="always")
Run Code Online (Sandbox Code Playgroud)
即使不存在NA,也会添加NA列。
vec_with_no_nas
A B C <NA>
1 2 1 0
Run Code Online (Sandbox Code Playgroud)
3.4.0(和3.2.5)的在线帮助文件说
useNA控制表是否包含NA值计数。
因此,该参数似乎确实可以直接解决您要执行的操作。exclude参数允许用户直接从表输出中删除因子变量的级别。
table(vec_with_no_nas, exclude="A")
vec_with_no_nas
B C
2 1
Run Code Online (Sandbox Code Playgroud)
这比从构造的表对象中删除不需要的级别更干净。
注意:
在线3.4.0帮助文件提到了同时使用exclude和useNA参数的病理情况,并且还提供了一个值得进一步探讨的示例。