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