#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть фрейм данных, который содержит записи о карьере сотрудников в разных офисах крупных корпораций. Я хочу идентифицировать каждую пару сотрудников, которые имеют общий опыт работы в одном офисе. Моя структура фрейма данных выглядит следующим образом
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
В приведенном выше примере Генри и Питер вместе работали в отделе кадров в 2013 году. Генри также работал с Бобом в области логистики в 2011 и 2012 годах. Я хочу, чтобы конечные результаты могли быть чем-то вроде:
Year_of_shared_experience Person_A Person_B
1 Henry Peter
2 Henry Bob
Порядок Person_A и Person_B не имеет значения (т. Е. Это может быть Генри в Person_A или Питер в столбце Person_A). Спасибо!
Ответ №1:
Вы можете объединить таблицу с самой собой (т.Е. С «самосоединением»), а затем отфильтровать повторяющиеся записи:
# 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
Ответ №2:
Опция в tidyverse
library(dplyr)
full_join(dat, dat, by = c("Year", "Office")) %>%
filter(Employee_Name.x < Employee_Name.y)
Комментарии:
1. Спасибо за помощь @akrun!