【问题标题】:Table including explicit NAs in R > 3.4.0包含 R > 3.4.0 中的显式 NA 的表
【发布时间】:2017-12-01 20:22:08
【问题描述】:

编辑:被接受的答案帮助我从眼睛上掉下来了;这种变化是一种改进,毕竟不烦人。

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 

看到了吗?没有明确确认零 NA。

我真正想要的是类似于旧行为的东西,即:

> 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 工作。是否有一个插入式 table 替代品可以明确确认没有 NA?

【问题讨论】:

  • 也许您可以使用useNA 参数? table(vec_with_no_nas, useNA="always")。我目前无法访问 3.4.0 直接测试。
  • 就是这样!如果您将 table(vec_with_nas, useNA = "always") table(vec_with_no_nas, useNA = "always") 放在答案中,我会接受!

标签: r na tidyverse


【解决方案1】:

您可以尝试将 useNA 参数设置为“始终”。在 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)的在线帮助文​​件说

useNA 控制表格是否包含 NA 值的计数。

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

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

这比从构造的表对象中删除不需要的级别更干净。

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

【讨论】:

    【解决方案2】:

    data.table可用于快速创建汇总表,默认包含NAs。

    # 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
    

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 2012-10-12
      • 2021-07-31
      • 2017-08-28
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多