首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与NA值在R中导致坏子集的数值比较

与NA值在R中导致坏子集的数值比较
EN

Stack Overflow用户
提问于 2014-06-03 16:54:57
回答 1查看 774关注 0票数 2

有人能向我解释,为什么逻辑评估决心在向量比较子集中产生假行?例如:

代码语言:javascript
运行
复制
employee <- c("Big Shot CEO", "Programmer","Intern","Guy Who Got Fired Last Week")
salary <-   c(      10000000,        50000,       0,                           NA)
emp_salary <- data.frame(employee,salary)

# how many employees paid over 100K?
nrow(emp_salary[salary>100000,]) # Returns 2 instead of 1 -- why?

emp_salary[salary>100000,]
# returns a bogus row of all NA's (not "Guy Who Got Fired")
#        employee salary
# 1  Big Shot CEO  1e+07
# NA         <NA>   <NA>

salary[salary>100000]
# returns:
# [1] 1e+07    NA

NA > 100000 #returns NA

考虑到这种意想不到的行为,在上面的例子中,计算员工收入超过100 K的首选方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 17:01:06

首先,你可能不想先cbind() --这会迫使你所有的变量都变成字符。

代码语言:javascript
运行
复制
 emp_salary <- data.frame(employee,salary)

有两种可能的解决办法:

  • subset自动排除标准为NA的情况。

代码语言:javascript
运行
复制
nrow(subset(emp_salary,salary>1e5))
  • 直接计数结果并使用na.rm=TRUE

代码语言:javascript
运行
复制
sum(salary>1e5,na.rm=TRUE)

至于假行背后的逻辑:

  • bigsal <- salary>1e5是包含NA的逻辑向量,因为它必须这样做(因为无法知道NA值是否满足标准)。
  • 当用包含NA的逻辑向量索引数据帧的行时,这可能是最突出的文档(来自help("[")): 提取时,数字、逻辑或字符‘NA’索引选择一个未知元素,因此在逻辑、整数、数字、复杂或字符结果的对应元素中返回‘NA’,并返回列表的‘NULL’。

(我搜索了help("[.data.frame"),找不到更有用的东西了。)

需要记住的是,一旦索引完成,R就不再知道逻辑向量是从salary列中创建的,因此它无法做您想做的事情,即保留其他列中的值。这里有一种方法可以考虑用NA行中的所有列填充NAs的似乎很奇怪的行为:如果R完全排除了该行,那就相当于FALSE。如果它保留了它(并且记住它不能只保留几列并删除其他列),那么这将与TRUE的标准相对应。如果标准既不是FALSE也不是TRUE,那么很难看出其他行为是有意义的.

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

https://stackoverflow.com/questions/24020784

复制
相关文章

相似问题

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