【问题标题】:Inner Join when Duplicates Exist for Joining Variable [duplicate]连接变量存在重复项时的内连接 [重复]
【发布时间】:2012-06-18 03:35:21
【问题描述】:

可能重复:
How to join data frames in R (inner, outer, left, right)?

This question 很好地完成了 R 中的连接。

并且内部连接上的Wikipedia article 很有用。

我想在基础 R 中重现这个结果。我不认为以下工作:

merge(employee,department,all=T)
merge(employee,department)

因为合并变量上的重复项。

但是,sqldf 有效:

library(sqldf)
sqldf("select * from employee  inner join department ON employee.DepartmentID = department.DepartmentID")

我的问题是:

  1. 这是否意味着merge在此处不执行内连接。

  2. 如何在基础 R 中完成此连接。

这是来自网站和上面示例的两个数据框架。

employee <- structure(list(LastName = c("Rafferty ", "Jones", "Steinberg", 
"Robinson", "Smith", "John"), DepartmentID = c("31", "33", "33", 
"34", " 34", " .")), .Names = c("LastName", "DepartmentID"), class = "data.frame", row.names = c(NA, -6L))

department <- structure(list(DepartmentID = c(31L, 33L, 34L, 35L), DepartmentName =    structure(c(4L,2L, 1L, 3L), .Label = c("Clerical", "Engineering", "Marketing", "Sales"), class = "factor")), .Names = c("DepartmentID", "DepartmentName"), class = "data.frame", row.names = c(NA, -4L))

【问题讨论】:

  • 您对merge 的使用与您链接到的问题中如何进行内部连接的描述不符。
  • sqldf 输出与链接中的示例相匹配。有没有办法通过合并来做到这一点?我在几个地方读过合并是一个内部连接,所以我也试图更好地理解这个定义。谢谢。
  • 正如我所说,将您的代码merge(employee,department,all = T) 与您在上面链接到的问题中进行内部连接的说明进行比较。您没有按照那里接受的答案指示您这样做。

标签: r sqldf


【解决方案1】:

朱丽叶,

请看看这是否适合你。我检查了数据结构的结构,看看为什么结果不是预期的。

str(department)
str(employee)
employee$DepartmentID <- as.numeric(employee$DepartmentID)
merge(employee,department)

【讨论】:

  • all.x = T 未指定内部联接。正如OP本身链接到的问题中明确描述的那样,这将产生一个左外连接。 (但你是对的,另一个问题是 ID 列之一是字符。)
  • 谢谢。看来我把那个搞砸了。正如 Joran 所说,我使用的结构不匹配。我的第一个问题表现不佳。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多