如何在r中执行iferror vlookup

时间:2016-06-23 07:49:15

标签: r

我在excel中使用iferror和vlookup创建了一个公式(如下所述)。请你告诉我如何在R中复制相同的内容

此查找转到main_df,它与名为E& F

的各个列匹配

因此条件是在E列上的vlookup与sheet1如果错误然后在F上与sheet2 vlookup并且如果错误然后再次在E上与sheet3 vlookup。所以基本上每次我得到NA它应该只拾取那些值并且执行下一个vlookup。

IFERROR(IFERROR(VLOOKUP($E2,'sheet1'!$K:$L,2,0),VLOOKUP($F2,'sheet2'!$A:$B,2,0)),VLOOKUP($E2,'sheet3'!$N:$O,2,0))

修改

   main_df
    Countries   City
    USA         Texas
    India       Mumbai
    China       Hunan
    Veitnam     Hue

其他DF

df_sheet1                            df_sheet2
    Countries Population          City      Population
    USA       1000000             Hunan     239857688
    India     118947759           Hue       667588

所需输出final_df

main_df
Countries   City      Population
USA         Texas     1000000
India       Mumbai    118947759
China       Hunan     239857688
Veitnam     Hue       667588

1 个答案:

答案 0 :(得分:1)

我假设您有两个dfs:

> data1
  Countries Population
1       USA    1000000
2     India  118947759

> data2
  Countries Population
1    Turkey     567748
2        UK    9857688
3     China  239857688
4    Canada     667588

> tomerge
  Countries
1       USA
2        UK
3     India
4     China
5   Denmark
6    Canada
7    Turkey

运行我在SO上的问题上找到的这个功能

MyMerge <- function(x, y){
              df <- merge(x, y, by= "Countries", all.x= TRUE, all.y= TRUE)
              return(df)
            }

然后使用Reduce

final <- Reduce(MyMerge,list(data1,data2,tomerge))


> final
  Countries Population.x Population.y
1     India    118947759           NA
2       USA      1000000           NA
3    Canada           NA       667588
4     China           NA    239857688
5    Turkey           NA       567748
6        UK           NA      9857688
7   Denmark           NA           NA