我有一个数据帧(a
),其中两列是total_amount
和Gender
。我需要计算男性和女性的总支出。
在“性别”列中,也有NA
个。在运行以下命令
tapply(a$total_amount,a$Gender, sum)
结果是:
F M
23623513 24935632
我的查询是:默认情况下,tapply
是否会删除细分类别中选择的细分列中的缺失值,例如,性别?如果是,那么我们如何将它们包括在结果中?
答案 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)
这意味着将分组变量转换为factor
。 levels
中的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)