首页 > 解决方案 > 比较不同数据帧的不同列和标志匹配

问题描述

我有两个数据框如下

df1<- 
 data.frame("name"=c("tom","bob","owen","john"),"last_name"=c("trump","obama"),"age"=c(24,28),"number"=c(1,2))
df2<-data.frame("name"=c("bob","owen","tom","marry"),"age"=c(28,26),"number"=c(3,1))

我想比较两个数据框之间的一些特定列,并在 df1 中创建一个状态列,如果它们匹配它应该标记匹配而不匹配它应该标记不匹配,如下所示:

df1 <- data.frame("name"=c("tom","bob","owen","john"),"last_name"=c("trump","obama"),"age"=c(24,28),"number"=c(1,2),"name_status"=c("matched","matched","matched","not matched"),"age_status"=c("notmatched","matched","not matched","matched"), "number_status"=c("matched","notmatched"))
    ```
    I tried using which %in% but as number of match is less than number of rows it throws an error
    Thank you for helping in advance

标签: r

解决方案


你可以使用类似的东西:

df1$name_status = ifelse(df1$name %in% df2$name, 'matched', 'not matched')

对于多列:

as.data.frame(sapply(1:length(names(df2)), function(i) ifelse(df1[, names(df2)[i]] %in% df2[, i], 'matched', 'not matched'))) -> df3
colnames(df3) <- paste0(names(df2), '_status')
df1 <- cbind(df1, df3)

推荐阅读