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