我有两个数据框。我想写一个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是最新的替代品。
答案 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")
}
}