我有一个数据框(a),其中有两列:total_amount和Gender。我需要计算一下男性和女性的消费总额。
在性别栏中,也有NA。在运行以下命令时
tapply(a$total_amount,a$Gender, sum)结果是:
F M
23623513 24935632我的问题是:默认情况下,tapply是否删除了为分类选择的片段列中的缺失值,即本例中的性别?如果是,那么我们如何将它们包含在我们的结果中?
发布于 2018-07-23 13:59:05
如果我们查看help(tapply),
t应用(X,索引,FUN = NULL,...,default = NA,simplify = TRUE)
索引:一个或多个‘因子’的‘列表’,每个因子的长度与‘X’相同。这些元素被“as.factor”强制转换为因子。
通过检查tapply代码
INDEX <- lapply(INDEX, as.factor)
...
namelist <- lapply(INDEX, levels)这意味着,分组变量被转换为factor。factor的levels排除了NA元素,这就是输出中没有任何NA作为组的原因
tapply(c(3, 4, 2, 6), c(NA, 1, 3, 4), sum)
# 1 3 4
# 4 2 6 但是,如果将NA元素转换为字符串,则在转换为factor时,它将是level
tapply(c(3, 4, 2, 6), c("NA", 1, 3, 4), sum)
# 1 3 4 NA
# 4 2 6 3 发布于 2018-07-23 14:12:04
是的,确实如此。
你可以做一个sum(is.na(a$Gender))。这将为您提供具有NA的行数。如果您想查看各个NA的总和,
x <- a[is.na(a$Gender), ]
sum(x$gender_total)https://stackoverflow.com/questions/51472214
复制相似问题