在R中根据x、y列将df1的Classification匹配到df2的问题
解决方法
你的需求是通过x和y列匹配,将df1的Classification列合并到df2中,且已知df2的所有x,y组合都存在于df1中。你之前的代码错误在于:
rows_patch的用途是修补数据框的缺失值,不是用来合并列的工具;semi_join仅按x列匹配,没有用到y列,且返回的结构不符合rows_patch对唯一键的要求,导致报错。
正确实现方式
最直接的方法是使用dplyr的left_join(或inner_join,因为df2的所有匹配键都存在于df1中,两者结果一致):
library(dplyr) # 合并df1的Classification列到df2,按x和y匹配 df_result <- df2 %>% left_join( df1 %>% select(x, y, Classification), # 只保留df1中需要的匹配列和目标列 by = c("x", "y") # 指定双列作为匹配键 )
另一种实现方式(基础R风格)
如果你偏好不用dplyr的join函数,也可以用match结合mutate实现:
df_result <- df2 %>% mutate( Classification = df1$Classification[ match(paste(x, y), paste(df1$x, df1$y)) ] )
说明
- 使用
select(x, y, Classification)是为了避免合并时引入df1中其他无关列,同时防止出现同名列冲突; - 因为df2的所有
x,y组合都存在于df1中,所以left_join不会产生NA值,效果和inner_join完全一致。
内容的提问来源于stack exchange,提问作者Purple_Ad
相关产品推荐
相关产品推荐

