首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认情况下,tapply是否排除了为分段传递的变量上的NA?

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

Stack Overflow用户
提问于 2018-07-23 13:45:37
回答 2查看 158关注 0票数 1

我有一个数据框(a),其中有两列:total_amountGender。我需要计算一下男性和女性的消费总额。

在性别栏中,也有NA。在运行以下命令时

代码语言:javascript
复制
tapply(a$total_amount,a$Gender, sum)

结果是:

代码语言:javascript
复制
 F        M 
23623513 24935632

我的问题是:默认情况下,tapply是否删除了为分类选择的片段列中的缺失值,即本例中的性别?如果是,那么我们如何将它们包含在我们的结果中?

EN

回答 2

Stack Overflow用户

发布于 2018-07-23 13:59:05

如果我们查看help(tapply),

t应用(X,索引,FUN = NULL,...,default = NA,simplify = TRUE)

索引:一个或多个‘因子’的‘列表’,每个因子的长度与‘X’相同。这些元素被“as.factor”强制转换为因子。

通过检查tapply代码

代码语言:javascript
复制
INDEX <- lapply(INDEX, as.factor)
...
namelist <- lapply(INDEX, levels)

这意味着,分组变量被转换为factorfactorlevels排除了NA元素,这就是输出中没有任何NA作为组的原因

代码语言:javascript
复制
tapply(c(3, 4, 2, 6), c(NA, 1, 3, 4), sum) 
#  1 3 4 
#  4 2 6 

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

代码语言:javascript
复制
tapply(c(3, 4, 2, 6), c("NA", 1, 3, 4), sum)
# 1  3  4 NA 
# 4  2  6  3 
票数 1
EN

Stack Overflow用户

发布于 2018-07-23 14:12:04

是的,确实如此。

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

代码语言:javascript
复制
x <- a[is.na(a$Gender), ]

sum(x$gender_total)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51472214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档