【问题标题】:In R: Trying to determine origin location of repeating ID numbers in a data set在 R 中:尝试确定数据集中重复 ID 号的原点
【发布时间】:2026-02-21 09:05:02
【问题描述】:

提前感谢您抽出宝贵时间阅读本文。我刚开始在没有编程背景的情况下学习 R,所以即使你能帮我为我正在尝试执行的分析或函数命名,以便我可以有效地寻找其他资源,我将不胜感激:

我正在尝试查看从特定地点释放的动物是否已移出其释放位置。我有 4 个释放站点和站点内的 20 多个样带。 “RECAP1”表示在对应于特定起源释放地点的样带上捕获的唯一 ID 号,“RUW”和“RLW”是两个起源释放地点。

下面我提供了我正在使用的集合的示例,我在“RECAP1”的第一行中使用了一个 ID #,它与“RUW”最后一行中的数字相匹配(我第一次使用 dput( ) 功能,如果我惨遭鞭打,请道歉):

structure(list(RUW = structure(c(4L, 5L, 3L, 2L, 1L, 6L), .Label = c("3D9.1C2DB5FC90", 
"3D9.1C2DB62A80", "3D9.1C2DB66C91", "3D9.1C2DB67255", "3D9.1C2DB67A27", 
"3D9.1C2DBF8F56"), class = "factor"), RLW = structure(c(3L, 4L, 
6L, 1L, 2L, 5L), .Label = c("3D9.1C2D859450", "3D9.1C2DBAA68F", 
"3D9.1C2DBE338A", "3D9.1C2DBE7B85", "3D9.1C2DBF15B8", "3D9.1C2DBF756E"
), class = "factor"), RECAP1 = structure(c(4L, 2L, 3L, 1L, 1L, 
1L), .Label = c("", "3D9.1C2DB5FF58", "3D9.1C2DB61CDC", "3D9.1C2DBF8F56"
), class = "factor")), .Names = c("RUW", "RLW", "RECAP1"), class = "data.frame", row.names = c(NA, 
-6L))

我想要实现的是一个表格/列表输出,它告诉我重复的 ID 号来自哪一列(按名称)。

这是我正在寻找的输出类型的示例:

         DETECTION          RECAP SITE         ORIGIN SITE
1   3D9.1C2DBF8F56     RECAP1             RUW
2   3D9.1C2DBF33H4     RECAP17            RLW
3   3D9.1C2DF4BE93     RECAP6             RLM

【问题讨论】:

  • 您的 recap site 列值看起来与 RECAP1 列不同。这只是为了举例还是我错过了什么?
  • 哦,不,抱歉,您没有遗漏任何内容,我仅以第 2 行和第 3 行为例。我有大约 20 个“RECAPx”站点,检测次数超过 600 次,我只是不确定你们想要查看多少数据。
  • 每一行到底代表什么?这里的ID变量我不是很懂。
  • @iShouldUseAName ,在示例输出中:这些行包含一个识别代码,该代码被检测到并且对于从特定位置释放的一种动物来说是唯一的。其他值是指原始数据,是重新捕获位置和原始发布位置的列名。在我提供的原始数据样本中:所有值都是 ID 代码,前两列是释放地点,第三列是动物被重新捕获的地方
  • 感谢分享可重现的输入。请确保您的可重复输入也可以实现样本输出。在这种情况下,这些值根本不匹配,因此很难猜测您要执行的操作。

标签: r reshape


【解决方案1】:

我认为这就是你想要做的。基本上,对于每个RECAP1 值,您想知道它是否出现在RUWRLW

library(reshape2)
df2 <- melt(
  df, 
  id.vars = 'RECAP1'
  )
df2[df2$RECAP1 %in% df2$value,1:2]

输出 -

> df2[df2$RECAP1 %in% df2$value,1:2]
          RECAP1 variable
1 3D9.1C2DBF8F56      RUW
7 3D9.1C2DBF8F56      RLW

如果我误解了,您能否将您的示例输入和示例输出与您尝试完成的确切过程联系起来?

【讨论】: