Функция Vlookup / Match в R для непрерывного столбца в R - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть 2 кадра данных. df1:

Dis1_SubDIs1_Village1       Dis2_SubDIs1_Village1   Dis1_SubDIs2_Village1
JODHPUR|JODHPUR|JODHPUR     |JODHPUR|JODHPUR        JODHPUR||JODHPUR
JHUNJHUNUN|JHUNJHUNUN|BARI  |JHUNJHUNUN|BARI        JHUNJHUNUN|BARI|BARI
BUNDI|HINDOLI|BUNDI         |HINDOLI|BUNDI          BUNDI|BUNDI|BUNDI
SIROHI|SIROHI|SIROHI        |SIROHI|SIROHI          SIROHI||SIROHI
ALWAR|ALWAR|BASAI           |ALWAR|BASAI            ALWAR||BASAI
BHARATPUR|BHARATPUR|SEEKRI  |BHARATPUR|SEEKRI       BHARATPUR||SEEKRI

и вторые данные, df2:

High
|BHARATPUR|SEEKRI
BUNDI|HINDOLI|BUNDI
SIROHI||SIROHI
CHURU|TARANAGAR|DABRI CHHOTI

Теперь я хочу применить vloook / match в df1 относительно столбца df2. То же самое мы делаем в 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)

По-прежнему появляется ошибка.

Мой окончательный вывод должен выглядеть следующим образом ниже прилагается с файлом df:

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

для номера N столбцов, должно быть N нет. столбцов с соответствием Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 апреля 2020

Никаких циклов с этим не нужно - apply и match должны работать нормально. apply будет перебирать столько столбцов, сколько у вас есть, поэтому на выходе будет столько же столбцов, сколько на входе. В вашем примере apply упростит создание матрицы.

apply(X = df1, 
      MARGIN = 2,
      FUN = function(x) df2$High[match(x, df2$High)])

Если вам нужен информационный фрейм в качестве выходных данных, поместите приведенный ниже код в as.data.frame ()

as.data.frame(apply(X = df1, 
      MARGIN = 2,
      FUN = function(x) df2$High[match(x, df2$High)]))
...