Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中连续列的Vlookup/Match函数_R_Match_Vlookup - Fatal编程技术网

R中连续列的Vlookup/Match函数

R中连续列的Vlookup/Match函数,r,match,vlookup,R,Match,Vlookup,我有一个2数据帧。 df1: 第二个数据, df2: 现在,我想在df1中对df2列应用vloook/match。我们在excel中也是这样做的。 如果存在精确匹配,请给我匹配,否则为0 我试着在R中创建函数 相配 for(i in names(df1)){ match_vector = match(df_final[,i], df$High, incomparables = NA) df1$High = df2$High[match_vector] } 但是有一个错误。它只显示最

我有一个2数据帧。 df1:

第二个数据, df2:

现在,我想在df1中对df2列应用vloook/match。我们在excel中也是这样做的。 如果存在精确匹配,请给我匹配,否则为0

我试着在R中创建函数 相配

for(i in names(df1)){
  match_vector = match(df_final[,i], df$High, incomparables = NA)

  df1$High = df2$High[match_vector]

}
但是有一个错误。它只显示最后一列,并替换其他列的值

对于vlookup:

func_vlook = function(a){
  for(i in 1:ncol(a)) {
    lookup_df = vlookup_df(lookup_value = i, 
                   dict = df2,
                   lookup_column = 1)

  }

  return(lookup_df)

}

lookup_df <- func_vlook(a = df1)
对于N个列,应该有N个匹配的列
请帮助。

无需使用此循环-
应用
匹配
应该可以正常工作
apply
将迭代您拥有的列数,因此输出的列数将与输入的列数相同。在您的示例中,
apply
将简化以生成矩阵

apply(X = df1, 
      MARGIN = 2,
      FUN = function(x) df2$High[match(x, df2$High)])
如果需要一个dataframe作为输出,那么将下面的代码包装为as.data.frame()


:谢谢你的帮助,没问题。如果答案是正确的,你能接受它,这样它就可以关闭了吗?
func_vlook = function(a){
  for(i in 1:ncol(a)) {
    lookup_df = vlookup_df(lookup_value = i, 
                   dict = df2,
                   lookup_column = 1)

  }

  return(lookup_df)

}

lookup_df <- func_vlook(a = df1)
Dis1_SubDIs1_Village1_M1   Dis2_SubDIs1_Village1_M2   Dis1_SubDIs2_Village1_M3
NA                         NA                             NA
NA                         NA                             NA
BUNDI|HINDOLI|BUNDI        NA                             NA
NA                         SIROHI||SIROHI              SIROHI||SIROHI
NA                         NA                             NA
NA                         NA                          |BHARATPUR|SEEKRI
apply(X = df1, 
      MARGIN = 2,
      FUN = function(x) df2$High[match(x, df2$High)])
as.data.frame(apply(X = df1, 
      MARGIN = 2,
      FUN = function(x) df2$High[match(x, df2$High)]))