我有两个大数据帧。 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上提出的第一个问题 - 如果不是很好,我会道歉 - 欢迎任何有关如何改进问题的评论!
干杯!
答案 0 :(得分:4)
您可以使用merge
执行此操作。只需指定正确的by.x
和by.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"))