在默认情况下,tapply是否排除传递给分段的变量上的NA?

时间:2018-07-23 05:45:37

标签: r tapply

我有一个数据帧(a),其中两列是total_amountGender。我需要计算男性和女性的总支出。

在“性别”列中,也有NA个。在运行以下命令

tapply(a$total_amount,a$Gender, sum)

结果是:

 F        M 
23623513 24935632

我的查询是:默认情况下,tapply是否会删除细分类别中选择的细分列中的缺失值,例如,性别?如果是,那么我们如何将它们包括在结果中?

2 个答案:

答案 0 :(得分:0)

如果我们查看help(tapply),

  

tapply(X,INDEX,FUN = NULL,...,默认= NA,简化= TRUE)

     

INDEX:一个或多个“因子”的“列表”,每个因子的长度与             'X'。元素通过“ as.factor”强制转换为因子。

通过检查tapply代码

INDEX <- lapply(INDEX, as.factor)
...
namelist <- lapply(INDEX, levels)

这意味着将分组变量转换为factorlevels中的factor排除了NA元素,这就是在输出中我们没有任何NA作为组的原因

tapply(c(3, 4, 2, 6), c(NA, 1, 3, 4), sum) 
#  1 3 4 
#  4 2 6 

但是,如果将NA元素转换为字符串,则将其转换为level时将是factor

tapply(c(3, 4, 2, 6), c("NA", 1, 3, 4), sum)
# 1  3  4 NA 
# 4  2  6  3 

答案 1 :(得分:0)

是的。

您可以执行sum(is.na(a$Gender))。这将为您提供具有NA的行数。 而且,如果您要查看各个NA的总和,

x <- a[is.na(a$Gender), ]

sum(x$gender_total)