R 数据帧的匹配对

Ran*_*ker 2 r dataframe

我有一个数据框,其中包含一家大公司不同办公室员工的职业记录。我想找出在同一个办公室共享工作经验的每一对员工。我的数据框结构如下所示

    Year   Office     Employee_Name
    2011   Logistics  Henry
    2012   Logistics  Henry
    2013   HR         Henry
    
    2012   Marketing  Peter
    2013   HR         Peter
    2014   HR         Peter
    2015   HR         Peter

    2010   Logistics  Bob
    2011   Logistics  Bob
    2012   Logistics  Bob
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,Henry 和 Peter 在 2013 年一起在 HR 工作。Henry 在 2011 年和 2012 年还和 Bob 一起在物流部门工作。我希望最终结果可以是这样的:

Year_of_shared_experience Person_A Person_B
1                         Henry    Peter
2                         Henry    Bob
Run Code Online (Sandbox Code Playgroud)

Person_A 和 Person_B 的顺序无关紧要(即,可以是 Person_A 中的 Henry,也可以是 Person_A 列中的 Peter)。谢谢!

Vin*_*ent 5

您可以将表与自身合并(即“自联接”),然后过滤掉重复的条目:

# read data
dat = "
Year   Office     Employee_Name
2011   Logistics  Henry
2012   Logistics  Henry
2013   HR         Henry
2012   Marketing  Peter
2013   HR         Peter
2014   HR         Peter
2015   HR         Peter
2010   Logistics  Bob
2011   Logistics  Bob
2012   Logistics  Bob"
dat = read.table(text=dat, header=TRUE)

# self-join
dat = merge(dat, dat, all=TRUE, by=c("Year", "Office"))

# filter out duplicates
dat = dat[dat$Employee_Name.x < dat$Employee_Name.y,]

dat 
#>    Year    Office Employee_Name.x Employee_Name.y
#> 4  2011 Logistics             Bob           Henry
#> 8  2012 Logistics             Bob           Henry
#> 12 2013        HR           Henry           Peter
Run Code Online (Sandbox Code Playgroud)