我正在尝试这一点,尝试根据另一个向量中的向量值来对数据帧进行子集化:
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
我真的不明白。我知道这可能是重复的,但我找不到一个。
答案 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)