【问题标题】:Subsetting a data frame when values in two columns match those in a second data frame当两列中的值与第二个数据框中的值匹配时,对数据框进行子集化
【发布时间】:2014-03-16 14:34:05
【问题描述】:

我有两个大数据框。 df1 有两列感兴趣的列(除其他外),它们是 A1 中的物种名称列表和 A2 中的 3 个字母区域列表。每一行都是一个独立的记录,因此值可能在两列中重复多次,并且有很多行(约 900 万行):

   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   

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

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

x

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

这也是我在 Stack Overflow 上提出的第一个问题——如果不是很好,我很抱歉——欢迎任何关于如何改进问题的 cmets!

干杯!

【问题讨论】:

    标签: r dataframe subset multiple-columns


    【解决方案1】:

    您可以使用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"))
    

    【讨论】:

    • 完美运行,感谢影子!我没想过要使用合并。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多