【问题标题】:Matching data in R when not all elements match当并非所有元素都匹配时,在 R 中匹配数据
【发布时间】:2015-11-29 15:21:42
【问题描述】:

我有一个包含邮政编码列的数据框。我还有一个数据框,其中包含邮政编码列表以及它们所属的大都会统计区。我正在尝试根据邮政编码附加 MSA。不保证任一数据框中的邮政编码在另一个数据框中,并且主数据中的每个邮政编码可能会多次出现。数据框以 779 行开始,应以 779 行结束。我试过下面的合并命令

sheet <- merge(sheet, msa, by = "Zip", all.x = TRUE, all.y=FALSE)

但是,生成的数据框有 1881 行。

我也尝试过使用 plyr

test <- join(sheet, msa, by = "Zip")

这也会产生一个包含 1881 行的数据框。

我想我可以用 %in% 和 for 循环来做我想做的事,但我希望有一个命令可以做我想做的事。

提前感谢您的帮助。

【问题讨论】:

  • each zip code in the master data may be seen more than once 那么它以比开始时更多的行结尾也就不足为奇了。在msa 中多次出现一个邮政编码的情况下,你想怎么办?
  • 听起来你想要一个dplyr::left_join(sheet, msa)。试试including at least a little data for easier trouble shooting。
  • @jeremycg dplyr::left_join 等价于merge(... all.x = T, all.y = F) 和plyr::join()(默认为type = "left")。这里的问题是如何处理多个匹配,并且 100% 同意需要可重复性。具有所需输出的 ​​5-10 行示例将使事情变得清晰明了。
  • 我很笨。我没有意识到 msa 数据框中有重复的值。一旦我在那里删除了重复项,我就没有问题了。我还有其他困难,当我明天发新帖子时,我会确保我拼凑出一个虚拟数据集。我不能使用任何真实的东西,因为它包含敏感信息。

标签: r merge plyr


【解决方案1】:

我使用 excel 从 msa 列中删除了重复项。一旦我这样做了,它就解决了这个特定的问题。

删除重复项后,简单的合并命令就起作用了:

merge(sheet, msa, by = "Zip", all.x = TRUE, all.y = FALSE)

【讨论】:

  • 能否请您提供用于解决问题的代码,以便将来这篇文章对其他人有用。
  • 没有真正的命令;我删除了 excel 中的重复项,然后正常的 merge() 命令完成了我想要的操作。我已经更新了我的解决方案以反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2012-02-12
  • 2011-09-15
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多