R 如何选择与向量中的值匹配的行

R 如何选择与向量中的值匹配的行,r,dataframe,R,Dataframe,这可能是一个非常简单的问题,甚至可能已经回答了,但我找不到它。 我有两个数据帧。为了简单起见,我将它们称为all和indexall将有许多列,其中一列我将调用match索引还有许多(其他)列,包括匹配。我想让all中具有match值的行在索引中匹配match。因此,作为虚拟数据: all <- data.frame(match = sample(LETTERS, 20), otherStuff = rnorm(20)) index <- data

这可能是一个非常简单的问题,甚至可能已经回答了,但我找不到它。 我有两个数据帧。为了简单起见,我将它们称为
all
index
all
将有许多列,其中一列我将调用
match
<代码>索引还有许多(其他)列,包括
匹配
。我想让
all
中具有
match
值的行在
索引中匹配
match
。因此,作为虚拟数据:

all <- data.frame(match = sample(LETTERS, 20),
                  otherStuff = rnorm(20))

index <- data.frame(match = sample(LETTERS, 20),
                    moreStuff = rnorm(20))
但这种做法效果非常糟糕:

> all[all$match == index$match,]
  match otherStuff
3     C -0.6030772

Warning message:
In all$match == index$match :
  longer object length is not a multiple of shorter object length
如您所见,它给出了这个警告,并且似乎只考虑相同位置的匹配(在本例中,C是两种情况下的第三个元素)


在那之后,我尝试了类似的
filter()
,来自
dplyr
,只是为了给它一个机会。正如我预料的那样,它没有起作用。我尝试了一些其他的事情(不太合乎逻辑,实际上有点绝望,甚至在这里发表评论都是胡说八道),所有这些从一开始就显得很疯狂。我真的不知道该怎么办…

另一个解决方案是使用
匹配

数据:


另一种解决方案是使用
match

数据:


试试看:
all[all$match%在%index$match中,]
!我不知道这个运算器,但我猜它只是这样做的:找到所有匹配项的索引…这可以被概念化为一个内部连接,你可以做
merge(all,index[“match”])
dplyr::internal_连接(all,index[“match”])
。简单的
%in%
方法在这种情况下很有意义,只要有一列要匹配,连接方法就会在您有多个列要匹配的情况下得到推广。请尝试:
all[all$match%in%index$match,]
它工作得很好!我不知道这个运算器,但我猜它只是这样做的:找到所有匹配项的索引…这可以被概念化为一个内部连接,你可以做
merge(all,index[“match”])
dplyr::internal_连接(all,index[“match”])
。%
中简单的
%方法在这种情况下是有意义的,因为只有一个列需要匹配,如果有多个列需要匹配,则连接方法会向上推广。
> all[all$match == index$match,]
  match otherStuff
3     C -0.6030772

Warning message:
In all$match == index$match :
  longer object length is not a multiple of shorter object length
set.seed(123)
all <- data.frame(match = sample(LETTERS, 10),
                  otherStuff = rnorm(10))

index <- data.frame(match = sample(LETTERS, 10),
                    moreStuff = rnorm(10))
all[match(index$match, all$match, nomatch = 0),]
   match otherStuff
10     Z -0.5558411
5      W -0.4456620
8      Q  0.4007715
6      A  1.2240818
7      K  0.3598138