如何使用不同的列与 dplyr 进行自连接?
How to do self join with dplyr using different columns?
我想在 R 中使用 dplyr
实现一个经典的自连接问题,但无法实现。
输入: 带有 empid
、empname
和 managerid
的数据框
输出: 每个 empid
的数据帧 managername
library(dplyr)
empid = c(1, 2, 3, 13, 11, 9, 8, 7, 3)
empname = paste0("emp", empid)
managerid = c(0, 0, 1, 2, 2, 1, 3, 2, 1)
df = data.frame(empid, empname, managerid)
df
# empid empname managerid
# 1 emp1 0
# 2 emp2 0
# 3 emp3 1
# 13 emp13 2
# 11 emp11 2
# 9 emp9 1
# 8 emp8 3
# 7 emp7 2
# 3 emp3 1
df %>%
unique() %>%
left_join(., ., by = ("managerid" = "empid"))
# empid empname.x managerid.x empname.y managerid.y
# 1 emp1 0 emp1 0
# 2 emp2 0 emp2 0
# 3 emp3 1 emp3 1
# 13 emp13 2 emp13 2
# 11 emp11 2 emp11 2
# 9 emp9 1 emp9 1
# 8 emp8 3 emp8 3
# 7 emp7 2 emp7 2
代码显然没有给出预期的结果;应该是这样的:
# empid empname.x managerid.x empname.y
# 1 emp1 0 NA
# 2 emp2 0 NA
# 3 emp3 1 emp1
# 13 emp13 2 emp2
# 11 emp11 2 emp2
# 9 emp9 1 emp1
# 8 emp8 3 emp3
# 7 emp7 2 emp2
您只需将 by
条件设为向量:left_join(., ., by = c("managerid" = "empid"))
我想在 R 中使用 dplyr
实现一个经典的自连接问题,但无法实现。
输入: 带有 empid
、empname
和 managerid
输出: 每个 empid
managername
library(dplyr)
empid = c(1, 2, 3, 13, 11, 9, 8, 7, 3)
empname = paste0("emp", empid)
managerid = c(0, 0, 1, 2, 2, 1, 3, 2, 1)
df = data.frame(empid, empname, managerid)
df
# empid empname managerid
# 1 emp1 0
# 2 emp2 0
# 3 emp3 1
# 13 emp13 2
# 11 emp11 2
# 9 emp9 1
# 8 emp8 3
# 7 emp7 2
# 3 emp3 1
df %>%
unique() %>%
left_join(., ., by = ("managerid" = "empid"))
# empid empname.x managerid.x empname.y managerid.y
# 1 emp1 0 emp1 0
# 2 emp2 0 emp2 0
# 3 emp3 1 emp3 1
# 13 emp13 2 emp13 2
# 11 emp11 2 emp11 2
# 9 emp9 1 emp9 1
# 8 emp8 3 emp8 3
# 7 emp7 2 emp7 2
代码显然没有给出预期的结果;应该是这样的:
# empid empname.x managerid.x empname.y
# 1 emp1 0 NA
# 2 emp2 0 NA
# 3 emp3 1 emp1
# 13 emp13 2 emp2
# 11 emp11 2 emp2
# 9 emp9 1 emp1
# 8 emp8 3 emp3
# 7 emp7 2 emp2
您只需将 by
条件设为向量:left_join(., ., by = c("managerid" = "empid"))