Мне было трудно понять, как можно объединить две таблицы, используя 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>