循环以匹配一个数据帧中的记录并替换为另一个数据帧中的记录,直到R或Python中没有替换

时间:2017-11-02 21:29:18

标签: python r sqldf

我有两个数据框。我想写一个while循环来检查匹配值和替换。例如。 if item = item2和Rep!= Rep2然后创建一个新的 df2中的列与Rep。else如果item = item2和Rep = Rep2则检查是否 通过将Rep2与df1中的所有项目进行比较,Rep2在df1中有另一个替换。

 df1
Item  Rep
1. A  F
2. B  G
3. C  H
4. D    
5. H  I 
6. F   
7. E  Y

df2
item2  Rep2
1. c  H
2. A  F
3. E  Y
4. X  Y
5. B  W

我的代码找到了常用值并将其替换为此。我想将此代码放在while循环中,以检查每个匹配Rep2是否在df2中有新的替换。是否有另一种方法来做到这一点

library(sqldf) 
wdf1<- sqldf("select 
      df2.*,
      case
      when Item = item2 and Rep = Rep2 then 'Match' # i want a loop to go back and check if Rep2 has another replacement in df1
      when Item = item2 and Rep != rep2 then Rep 
      else 'Item no found'
      end Rep3
      from df2 left join df1 on Item = item2") 

这就是结果的样子

  item1 Rep2  Rep3
1. c     H     I
2. A     F     F
3. E     Y     Y
4. X     Y     not found
5. B     W     G

如果Rep3(在df2中充当新项目2)与df1中的项目匹配但是没有 Rep然后Rep3是最新的替代品。

1 个答案:

答案 0 :(得分:0)

for(i in nrow(tdf2)){

  while (tdf1$item[i] == tdf2$item2[i] && tdf1$Rep[i] !='') {
    wdf1[i]<- sqldf("update tdf2 
                 set Rep3 = 
                 case 
                 when Item = item2 and Rep = Rep2 then Rep
                 when Item = item2 and Rep = '' then 'Empty Rep'
                 when Item = item2 and Rep != '' then Rep
                 else 'Not found'
                 end Rep3
                 Where tdf2 left join tdf1 on Item = item2")
  }
}