R 如果值位于多列中的一列中,则按连接或合并数据帧

R 如果值位于多列中的一列中,则按连接或合并数据帧,r,join,merge,R,Join,Merge,我想根据df1中的某个值是否位于df2中的多列之一,连接两个数据帧(df1和df2) 例如: #create df1 year <- c(2017, 2017, 2016, 2016, 2015, 2015) person1 <- c('sam', 'sarah', 'sally', 'kat', 'ryan', 'sally') person2 <- c('mike', 'sally', 'ryan', 'sam', 'sam', 'mike') stocks <- r

我想根据
df1
中的某个值是否位于
df2
中的多列之一,连接两个数据帧(
df1
df2

例如:

#create df1
year <- c(2017, 2017, 2016, 2016, 2015, 2015)
person1 <- c('sam', 'sarah', 'sally', 'kat', 'ryan', 'sally')
person2 <- c('mike', 'sally', 'ryan', 'sam', 'sam', 'mike')
stocks <- rnorm(6, 50000, 10000)
df1 <- data.frame(year, person1, person2, stocks)

#create df2
year <- c(2017, 2017, 2016, 2016, 2015, 2015)
person1 <- c('sam', 'sally', 'sally', 'sam', 'ryan', 'mike')
person2 <- c('mike', 'sarah', 'ryan', 'kat', 'sam', 'sally')
bonds <- rnorm(6, 10000, 1000)
df2 <- data.frame(year, person1, person2, bonds)

#merge attempt
left_join(df1, df2, by = c('year', 'person1'))
#创建df1
年份平行最小值(或最大值)
pmin
/
pmax
-也可以处理字符,因此您可以基于该值创建一个新列并在其上合并,即

dplyr::left_join(transform(df1, new_person = pmin(person1, person2)), 
                 transform(df2, new_person = pmin(person1, person2)), 
                 by = c('year', 'new_person'))


注意:确保变量设置为.character

请发布此示例中所需的输出。并使用
set.seed()
复制随机值。
  year person1.x person2.x   stocks new_person person1.y person2.y     bonds
1 2017       sam      mike 51482.66       mike       sam      mike  9562.717
2 2017     sarah     sally 49111.11      sally     sally     sarah  9057.971
3 2016     sally      ryan 58437.37       ryan     sally      ryan 11129.295
4 2016       kat       sam 45919.27        kat       sam       kat 10257.276
5 2015      ryan       sam 44734.43       ryan      ryan       sam 10154.195
6 2015     sally      mike 49002.75       mike      mike     sally  9398.425