表中包括R中的显式NAs的表。 3.4.0

时间:2017-06-28 12:50:33

标签: r na tidyverse

编辑:接受的答案有助于我的眼睛掉下鳞片;这种改变是一种改进,毕竟不会烦人。

table的帮助文件中,现在写了:

  

非因子参数a通过因子(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)

这给出了输出:

> 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 

请参阅?没有明确确认零NAs。

我真正想要的是旧行为,即:

> table(vec_with_no_nas, exclude = NULL)
vec_with_no_nas
A B C <NA>
1 2 1 0

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 

我在基地和tidyverse工作。是否有明确确认没有NAs的table替换?

2 个答案:

答案 0 :(得分:5)

您可以尝试将useNA参数设置为“always”。在R 3.2.5中,

table(vec_with_no_nas, useNA="always")

添加NA列,即使没有NA。

vec_with_no_nas
   A    B    C <NA> 
   1    2    1    0 

3.4.0(和3.2.5)的在线帮助文​​件说

  如果表包含NA值的计数,则使用

useNA控制。

所以这个论点似乎直接解决了你想做的事情。 exclude参数允许用户直接从表输出中删除因子变量的级别。

table(vec_with_no_nas, exclude="A")
vec_with_no_nas
B C 
2 1 

哪个比从构造的表对象中删除不需要的级别更清晰。

注意:
在线3.4.0帮助文件提到了同时使用exclude和useNA参数的病态案例,并提供了一个值得进一步探索的示例。

答案 1 :(得分:0)

data.table可用于快速创建摘要表,并默认包含NA s。

# Create Dataset
library(data.table)
df=data.table(V1=c('A','B','B',NA),V2=1:4)
df
#      V1 V2
# 1:    A  1
# 2:    B  2
# 3:    B  3
# 4: <NA>  4

# Count Table
df[,.N,by=V1]
#      V1 N
# 1:    A 1
# 2:    B 2
# 3: <NA> 1

# Proportion Table
df[,.N/nrow(df),by=V1]
#      V1   V1
# 1:    A 0.25
# 2:    B 0.50
# 3: <NA> 0.25