当两列中的值与第二个数据帧中的值匹配时,子集数据帧

时间:2014-02-17 10:35:13

标签: r dataframe subset multiple-columns

我有两个大数据帧。 df1有两列感兴趣的列(其中包括),这些是A1中的物种名称列表和A2中3个字母区域的列表。每一行都是一个独立的记录,因此值可以在两列中重复多次,并且有很多行(约9百万):

   A1            A2
 species A       AFG  
 species B       THA  
 species B       LOP    
 species C       THA  

我的第二个数据框(df2)基本上列出了一个物种应该在其中出现的每个区域,因此对于每个值B1,将有多个行,每个行在B2中具有不同的值:

  B1         B2  
 species A   AFG
 species A   FLO
 species B   LOP   
 species B   PLA   
 species C   THA   

我想要做的是使用R将A2(在df1中)中给出的值与每个物种的B2(df2)中列出的值标准化。因此对于df1中的每一行,如果A1中的值与B1相同, AND A2与B2相同(如果A1 == B1& A2 == B2),请保留该行。因此,在上面的示例中,第2行将从df1中删除。

我尝试过以下但没有成功(没有删除行):

  

x< -df1 [df1 $ A1%in%df2 $ B1& df1 $ A2%in%df2 $ B2,]

有什么建议吗?匹配函数会更合适吗?

这也是我在Stack Overflow上提出的第一个问题 - 如果不是很好,我会道歉 - 欢迎任何有关如何改进问题的评论!

干杯!

1 个答案:

答案 0 :(得分:4)

您可以使用merge执行此操作。只需指定正确的by.xby.y参数即可。以下是如何执行此操作的示例:

# your data
df1 <- read.table(text="A1            A2
species_A       AFG  
species_B       THA  
species_B       LOP    
species_C       THA", header=TRUE)

df2 <- read.table(text="B1         B2  
species_A   AFG
species_A   FLO
species_B   LOP   
species_B   PLA   
species_C   THA", header=TRUE)

# merging data.frames
merge(df1, df2[,c("B1", "B2")], by.x=c("A1", "A2"), by.y=c("B1", "B2"))