从表中查找并提取与R

时间:2016-08-10 12:45:14

标签: r database match extract

我有两张桌子:

一个(表1)包含捕获的鸟的环号以及与该响铃相关的所有信息(形态特征,日期,位置等)。另一个(table2)具有来自不同广告系列的所有响铃号码,我已经搜索过它并将其剪裁为两者之间的副本。

因为存在大量的响铃(> 600),所以从一个列表逐个转到另一个列表并且将整行信息复制粘贴到新表中将是耗时的。

我希望能够提取table1中Ring列对应的所有行,这些行对应于table2中的ring的值,并获得仅包含提取值的新表。

我尝试为其中一个响铃编码,但它没有工作newtbl<-as.data.frame(table1[table1$ring==L45523,]只是为了看看它是否会直接在table1上按响铃号选择。

应该有一种方法可以从table2中拉出振铃数列表,只选择table1中的振铃号。

table1 looks like this

希望这是可能的。提前谢谢!

3 个答案:

答案 0 :(得分:1)

这听起来像是一个经典的关系连接场景。请参阅R4DS here中有关关系数据的说明。

如果您希望将table2中的列也拉入到结果中,请使用:

library(dplyr) results <- table1 %>% inner_join(table2, by = "Ring.No.")

如果只是希望table1中与table2中的铃号相匹配的记录,您可以尝试:

library(dplyr) results <- table1 %>% semi_join(table2, by = "Ring.No.")

请注意,如果在table2中调用其他内容,则可以使用更完整的by = ...语法:

library(dplyr) results <- table1 %>% semi_join(table2, by = c("Ring.No." = ["the name of ring number in table2"])

答案 1 :(得分:0)

您可以尝试使用包dplyr:  table1 %>% filter(Ring.No. %in% unique(table2$Ring.No.))

我不确定你的table2的结构,所以根据它是一个列表,一个data.frame或其他东西来调整代码。

答案 2 :(得分:0)

为什么不在基于RING的两个表上进行合并,因为这似乎是两个表之间的公共列名,然后根据RING名称进行过滤。其他明智的帖子摘录了两个表格代码。

newtable = merge(table1,table2 , by.x="table1.RING" , by.y="table2.RING",all=TRUE)
subset( newtable, RING ==YYYY)

使用代码来满足您的搜索结果。