【问题标题】:find and extract values from a table that match a list in R从表中查找并提取与 R 中的列表匹配的值
【发布时间】:2016-08-10 12:45:14
【问题描述】:

我有两张桌子:

一个(表1)包含捕获鸟类的环号以及与该环相关的所有信息(形态特征、日期、位置等)。另一个(table2)有来自不同活动的所有环号,我已经搜索并修剪了两者之间的重复项。

因为有分配的环 (>600),所以从一个列表逐个转到另一个列表并将整行信息复制粘贴到新表中会很耗时。

我希望能够从 table1 中的 Ring 列中提取与 table2 中环的值相对应的所有行,并获得一个仅包含提取值的新表。

我尝试为其中一个环编码,但它不起作用newtbl<-as.data.frame(table1[table1$ring==L45523,]只是想看看它是否会直接在 table1 上按环号选择。

应该有办法从table2中拉出环号列表,只选择table1中的。

table1 looks like this

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

【问题讨论】:

  • 如果您可以使您的帖子可复制,那将非常有用:请参阅此处以获取说明stackoverflow.com/help/mcve
  • 更具体地说,您可以发布(部分)数据,例如发布dput(head(table1, 10))dput(head(table2, 10)) 的输出,最好将行数和选定列数调整到最小但仍然有用的值
  • 抱歉,下次我会更正!感谢您的关注和参考。

标签: r database match extract


【解决方案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"])

【讨论】:

  • 非常感谢您的成功!我确实想要两个表中的两个信息,所以第一个解决方案效果很好! :)
【解决方案2】:

您可以尝试使用包 dplyrtable1 %&gt;% filter(Ring.No. %in% unique(table2$Ring.No.))

我不确定您的 table2 的结构,因此请根据它是列表、data.frame 还是其他东西来调整代码。

【讨论】:

    【解决方案3】:

    为什么不根据 RING 对两个表进行合并,因为这似乎是两个表之间的公共列名,然后根据 RING 名称进行过滤。其他明智的发布您的两个表格代码的摘录。

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

    修改代码以适应您想要的结果。

    【讨论】:

    • 谢谢,这个解决方案也有效,给了我由这些项目合并的两个表,谢谢。
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2016-11-04
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多