带有条件的R子集,使用%in%或==。应该使用哪一个?

时间:2014-11-07 16:03:57

标签: r subset

通常情况下,如果我想要使用子集和%in%来对某些值的数据帧条件进行子集化,那么:

x <- data.frame(u=1:10,v=LETTERS[1:10])
x
subset(x, v %in% c("A","D"))

现在,我发现==也给出了相同的结果:

subset(x, v == c("A","D"))

我只是想知道他们是否完全相同,或者是否有理由将其优先于另一个。 谢谢你的帮助。

编辑(@MrFlick):此问题与this here不同,它询问如何不包含多个值:(!x %in% c('a','b'))。我问为什么如果我使用==%in%,我也会这样做。

1 个答案:

答案 0 :(得分:3)

您应该使用第一个%in%,因为您只获得了结果,因为在示例数据集中,它是按AD的回收顺序排列的。在这里,它正在比较

rep(c("A", "D"), length.out= nrow(x))
# 1] "A" "D" "A" "D" "A" "D" "A" "D" "A" "D"

 x$v==rep(c("A", "D"), length.out= nrow(x))# only because of coincidence
 #[1]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE


subset(x, v == c("D","A"))
#[1] u v
#<0 rows> (or 0-length row.names)

而在上面

 x$v==rep(c("D", "A"), length.out= nrow(x))
 #[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

%in%有效

subset(x, v %in% c("D","A"))
#  u v
#1 1 A
#4 4 D