两个不等长度向量的比较

时间:2015-11-09 09:16:18

标签: r

我正在尝试这一点,尝试根据另一个向量中的向量值来对数据帧进行子集化:

x <- c( 1,2,3,1,2,3 )
df <- data.frame(x=x,y=x)
df[ df$x == c(1,2), ]

希望得到这个:

  x y
1 1 1
2 2 2
4 1 1
5 2 2

但我没有,我得到了这个:

  x y
1 1 1
2 2 2

无视我真的想要这个(一分钟后发生在我身上):

df[ df$x %in% c(1,2), ]

结果背后的逻辑是什么:

x == c(1,2)

是这样的:

[1]  TRUE  TRUE FALSE FALSE FALSE FALSE

我真的不明白。我知道这可能是重复的,但我找不到一个。

1 个答案:

答案 0 :(得分:2)

它基于将c(1,2)回收到'x'的长度,即我们将df$x

进行比较
rep(c(1,2),length.out= nrow(df))
#[1] 1 2 1 2 1 2

df$x ==rep(c(1,2),length.out= nrow(df))
#[1]  TRUE  TRUE FALSE FALSE FALSE FALSE

这意味着,我们将'x'的相应元素与相应的回收c(1,2)进行比较,而不是检查'x'的任何元素包含c(1,2)