【问题标题】:Using the %in% function for multiple columns to [duplicate]对多列使用 %in% 函数[重复]
【发布时间】:2021-06-01 14:29:03
【问题描述】:

我正在尝试使用 %in% 函数将我的一个数据集的观察结果与另一个数据集的观察结果相匹配。本质上,我想制作两个新数据集,一个包含第二个数据集的观察结果,另一个包含所有其他观察结果。这是一个示例数据集:

Df
Last.Name   First.Name        Group
Williams      Bob                A
Williams      Dan                C
Miller        Bob                A
Smith         Dan                C
Williams      Rick               A
Smart         Jeff               C
Miller        Bob                A
Smith         Dan                C
Jones         Bob                A
Williams      Buddy              C
Miller        Bob                A
Hends         Dan                C
Williams      Rick               A
Smart         Jeff               C
Millers       Bob                A
Smith         Danny              C

这是我试图匹配观察结果的数据集:

dfMatch
LastName   FirstName   
Williams      Bob          
Williams      Buddy                     
Miller        Bob                  
Smith         Dan                  
Williams      Rick                  
Smart         Jeff                  
Miller        Bob                 
Smith         Dan                 

我尝试了以下代码的各种版本:

newdf<-Df[ Df$Last.Name %in% DfMatch$LastName & Df$First.Name %in% DfMatch$FirstName,]

 newdf<-Df[ which(Df$Last.Name %in% DfMatch$LastName & Df$First.Name %in% DfMatch$FirstName),]

要获取这个新数据集:

newDF
Last.Name   First.Name          Group
Williams      Bob                  A
Miller        Bob                  A
Smith         Dan                  C
Williams      Rick                 A
Smart         Jeff                 C
Miller        Bob                  A
Smith         Dan                  C
Williams      Buddy                C

但是,这不起作用。

我还想使用类似的代码来构建一个数据集,其中包含 dfMatch 集中未列出的所有观察结果,例如:

DfNoMatch
Last.Name   First.Name          Group
Williams      Dan                  C
Jones         Bob                  A
Miller        Bob                  A
Hends         Dan                  C
Williams      Rick                 A
Smart         Jeff                 C
Millers       Bob                  A
Smith         Danny                C

通过使用类似的代码:

 DfNoMatch<-Df[ !Df$Last.Name %in% DfMatch$LastName & Df$First.Name %in% DfMatch$FirstName,]

 DfNoMatch<-Df[! which(Df$Last.Name %in% DfMatch$LastName & Df$First.Name %in% DfMatch$FirstName),]

提前感谢您,非常感谢您的帮助!

【问题讨论】:

  • 你需要加入这个。与dplyrrows_in_both = inner_join(Df, dfMatch, by = c("Last.Name" = "LastName", "First.Name" = "FirstName")DfNoMatch = anti_join(Df, dfMatch, by = c("Last.Name" = "LastName", "First.Name" = "FirstName")
  • 我想在我看完这个之后,如果我想过滤而不是匹配可能是最好的。有没有更有效的方法来做到这一点?

标签: r filter dplyr data-wrangling


【解决方案1】:

要真正匹配观察结果,请使用match-函数。 %in%-函数只告诉你有一个匹配,但它不会告诉你在哪里匹配什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2021-08-18
    • 2012-08-29
    相关资源
    最近更新 更多