#r #dataframe #dplyr #formula
#r #фрейм данных #dplyr #формула
Вопрос:
Я пишу функцию, которая принимает формулу и использует различные элементы этой формулы для управления фреймом данных. Я сталкиваюсь с проблемами, когда пытаюсь использовать dplyr
(я думаю, это из-за чего-то, называемого «нестандартной оценкой»).
Например, я хочу сослаться на столбец во фрейме данных df
, используя элементы в формуле. Если я сохраню формулу как form
и захочу получить доступ к столбцу df
, названному в честь первого элемента form
, я могу написать:
df[all.vars(form)[1]]
.
К сожалению, следующее не работает:
df %>% filter(all.vars(form)[1]) < 100).
Как бы я мог ссылаться на переменную таким образом, используя dpylr
? Я пробовал несколько таких вещей, rlang::sym
но не имел никакой удачи.
Ответ №1:
Мы могли бы использовать across
, который может содержать один или несколько столбцов
library(dplyr)
df %>%
filter(across(all.vars(form), ~ . < 100))
Если это один столбец
df %>%
filter(across(all.vars(form)[1], ~ . < 100))
Или другой вариант rlang::sym
с !!
df %>%
filter(!! rlang::sym(all.vars(form)[1]))
Вывод all.vars
является character
классом, и мы преобразуем его в sym
bol и оцениваем ( !!
)
Используя небольшой воспроизводимый пример
data(mtcars)
form <- mpg ~ cyl
mtcars %>%
filter(!! rlang::sym(all.vars(form)[1]) < 15)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Duster 360 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4
#Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
#Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
#Chrysler Imperial 14.7 8 440 230 3.23 5.345 17.42 0 0 3 4
#Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4