使用条件(不包括NA)子集矢量

时间:2018-04-18 02:30:02

标签: r logical-operators na

vector1 = c(1,2,3,NA)
condition1 = (vector1 == 2)
vector1[condition1]
vector1[condition1==TRUE]

在上面的代码中,condition1为“FALSE TRUE FALSE NA”, 并且第3和第4行都给我结果“2 NA” 这不是我的预期。

我想要的值为'2'的元素,不包括NA。

有人可以解释为什么R设计为以这种方式工作吗? 以及如何通过简单的命令获得我想要的结果?

4 个答案:

答案 0 :(得分:1)

子集 mFabButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (setFabButtonStarColor() == R.color.colorWhiteFavoriteStar) { mFabButton.setColorFilter(ContextCompat.getColor(DetailActivity.this, R.color.colorYellowFavoriteStar)); mFabButton.setContentDescription(getString(R.string.unsave_floatbutton)); try { saveMovie(); } catch (IllegalArgumentException e) { Log.e(TAG, e.getMessage()); } } else { mFabButton.setColorFilter(ContextCompat.getColor(DetailActivity.this, R.color.colorWhiteFavoriteStar)); mFabButton.setContentDescription(getString(R.string.save_floatbutton)); } } }); 始终为vector[NA],因为NA值未知,因此子集的结果也是未知的。 NA会为%in%返回FALSE,因此在此处有用。

NA

答案 1 :(得分:1)

如果您在RStudio并输入

?`[`

您将得到以下解释:

  

索引中的NAs

     

提取时,数字,逻辑或字符NA索引选择   未知元素,因此在a的相应元素中返回NA   逻辑,整数,数字,复数或字符结果,以及a的NULL   名单。 (对于原始结果,它返回00。)

     

替换时(即在赋值的lhs上使用索引)NA   不选择任何要替换的元素。因为有歧义   是否应该使用rhs的元素,这只是   如果rhs值是长度为1则允许(所以两个解释   会有相同的结果)。 (S的记录行为就是这样   一个NA替代指数'无处可去',但耗尽了一个元素   价值:Becker等人。 359.但是,其他情况并非如此   的实施方式。)

答案 2 :(得分:0)

在这种情况下尝试逻辑运算符,

vector1 = c(1,2,3,NA)
condition1<-(vector1==2 & !is.na(vector1) )
condition1
# FALSE TRUE FALSE FALSE
vector1[condition1]
# 2

&安培;当两个逻辑运算符都为True时,operation返回true。

答案 3 :(得分:0)

identical是&#34;测试两个对象完全相等的安全可靠的方法。在这种情况下它返回TRUE,在其他每种情况下都返回FALSE。&#34; (见?相同)

由于它不比较元素比较,你可以在sapply中使用它来将vector1中的每个元素与2进行比较。即:

condition1 = sapply(vector1, identical, y = 2)

将给出:

vector1[condition1]
[1] 2