r - 当使用相等 (==) 的因子对行进行子集化时,还包括 NA。 %in% 不会发生这种情况。正常吗?

标签 r equals subset na

假设我有一个具有 3 个级别 A1、A2、A3 和 NA 的因子 A。每个出现 10 个案例,所以总共有 40 个案例。如果我做

subset1 <- df[df$A=="A1",]  
dim(subset1)  # 20, i.e., 10 for A1 and 10 for NA's
summary(subset1$A) # both A1 and NA have non-zero counts
subset2 <- df[df$A %in% c("A1"),] 
dim(subset2)  # 10, as expected
summary(subset2$A) # only A1 has non-zero count

用于子集化的变量的类是因子还是整数都是一样的。它是如何平等(和>,<)工作的吗?所以我应该坚持 %in%对于因素,始终包括 !is.na什么时候使用相等?谢谢!

最佳答案

是的,返回类型是 ==%in%NA 不同因为如何"%in%"被定义为...

# Data...
x <- c("A",NA,"A")

# When NA is encountered NA is returned
# Philosophically correct - who knows if the
# missing value at NA is equal to "A"?!
x=="A"
#[1] TRUE   NA TRUE
x[x=="A"]
#[1] "A" NA  "A"

# When NA is encountered by %in%, FALSE is returned, rather than NA
x %in% "A"
#[1]  TRUE FALSE  TRUE
x[ x %in% "A" ]
#[1] "A" "A"

这是因为(来自文档)...
%in%match 的别名, 定义为
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0

如果我们将其重新定义为 match 的标准定义你会看到它的行为方式与 == 相同
"%in2%" <- function(x,table) match(x, table, nomatch = NA_integer_) > 0
x %in2% "A"
#[1] TRUE   NA TRUE

关于r - 当使用相等 (==) 的因子对行进行子集化时,还包括 NA。 %in% 不会发生这种情况。正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24040758/

相关文章:

r - 如何找到另一个变量的每个值的变量的平均值?

r - grid.arrange() : arrange 3 plots neatly

r - caret::train:为 mlpWeightDecay(RSNNS 包)指定更多非调整参数

r - 量化灰度图像

arrays - 在 R 中,将函数应用于多个输入以返回 POSIXlt 数组

java - 评估数组中的数学方程式

c - 如何使用数学运算符将字符串转换为数字(整数或 float )

java - 是否有 Java 标准 "both null or equal"静态方法?

r - 从不同的文件增量地对行进行子集

R:根据另一个数据框的条件对数据框进行子集化