通常情况下,如果我想要使用子集和%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%
,我也会这样做。
答案 0 :(得分:3)
您应该使用第一个%in%
,因为您只获得了结果,因为在示例数据集中,它是按A
,D
的回收顺序排列的。在这里,它正在比较
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