dplyr: NSE в объединениях (by) - PullRequest
       77

dplyr: NSE в объединениях (by)

0 голосов
/ 23 октября 2019

Мне было трудно понять, как можно объединить две таблицы, используя dplyr :: left_join с NSE. Проблема заключалась в том, что я не мог предоставить правильное значение «по». Я думаю, что нашел решение на данный момент, но мне кажется, что я делаю это очень сложным способом. Итак, если вы знаете более простое / более элегантное решение, пожалуйста, дайте мне знать:)

Это то, что я делаю:

# some data
df <- dplyr::tibble(x=1:10,
                    y=LETTERS[1:10],
                    z=LETTERS[11:20])

# some function
test_fun <- function(df,id){
  id <- rlang::enquo(id)
  join_var <- names(rlang::quos_auto_name(id))[2] # is there an easier way?
  # not important: doing some stuff
  df1 <- df %>%
    dplyr::select(!!id,y)
  df2 <- df %>%
    dplyr::select(!!id,z)
  # join using prepared join_var
  df1 %>%
    dplyr::left_join(df2,setNames(join_var,join_var))
}

test_fun(df,id=x)

Как меня попросили для дополнительного контекста и еще несколько объясненийЧтобы лучше понять мою проблему, я постараюсь дать здесь больше информации:

NSE - это сокращение от нестандартной оценки. Моя цель состояла в том, чтобы создать функцию, которая присоединяется к наборам данных на основе переменной, которую может определить пользователь. Основная проблема заключалась в том, что аргумент by в dplyr :: left_join не принимал переменную в кавычках (аргумент NSE), и поэтому мне пришлось искать обходной путь. Способ, который я нашел (join_var <- names (rlang :: quos_auto_name (id))) [2]), казался немного сложным, и я искал более простое решение. Между прочим, это было предоставлено Лионелем Генри ... спасибо:) </p>

1 Ответ

1 голос
/ 23 октября 2019

Вы ищете join_var <- rlang::as_name(id).

...