, и вам все еще нужно расстаться с этим. То есть также работает следующее:
юсь с программированием, используяdplyr
в R для работы со столбцами фрейма данных, которые известны только по именам строк. Я знаю, что недавно было обновлениеdplyr
для поддержки цитат и тому подобного, и я рассмотрел, как мне кажется, соответствующие компоненты новой статьи «Программирование с помощью dplyr» здесь:http://dplyr.tidyverse.org/articles/programming.html, Однако я все еще не могу делать то, что хочу.
Моя ситуация такова, что я знаю имя столбца фрейма данных только по имени строки. Таким образом, я не могу использовать нестандартную оценку при обращении кdplyr
внутри функции или даже сценария, в котором имя столбца может меняться между запусками, потому что я не могу жестко закодировать имя столбца без кавычек (то есть «голое») в целом Мне интересно, как обойти это, и я предполагаю, что я что-то упускаю из виду с новым синтаксисом цитирования / отмены цитирования.
Например, предположим, что у меня есть пользовательские вводы, которые определяют процентили отсечения для распределения данных. Пользователь может запустить код, используя любой процентиль, который он / она захочет, и процентиль, который он / она выберет, изменит вывод. В рамках анализа создается столбец в промежуточном фрейме данных с именем используемого процентиля; таким образом, имя этого столбца изменяется в зависимости от введенного пользователем процентиля обрезки.
Ниже приведен минимальный пример для иллюстрации. Я хочу вызвать функцию с различными значениями для процентиля отсечки. Я хочу фрейм данных с именемMPGCutoffs
иметь столбец, который назван в соответствии с выбранным квантилем обрезки (это в настоящее время работает в приведенном ниже коде), и я хочу позже работать с этим именем столбца. Из-за общности названия этого столбца я могу знать его только с точки зрения вводаpctCutoff
на момент написания функции, поэтому мне нужен способ работать с ней, когда известно только строку, определеннуюprobColName
, который следует предварительно определенному шаблону на основе значенияpctCutoff
.
userInput_prob1 <- 0.95
userInput_prob2 <- 0.9
# Function to get cars that have the "best" MPG
# fuel economy, where "best" is defined by the
# percentile cutoff passed to the function.
getBestMPG <- function( pctCutoff ){
# Define new column name to hold the MPG percentile cutoff.
probColName <- paste0('P', pctCutoff*100)
# Compute the MPG percentile cutoff by number of gears.
MPGCutoffs <- mtcars %>%
dplyr::group_by( gear ) %>%
dplyr::summarize( !!probColName := quantile(mpg, pctCutoff) )
# Filter mtcars with only MPG values above cutoffs.
output <- mtcars %>%
dplyr::left_join( MPGCutoffs, by='gear' ) %>%
dplyr::filter( mpg > !!probColName ) #****This doesn't run; this is where I'm stuck
# Return filtered data.
return(output)
}
best_1 <- getBestMPG( userInput_prob1 )
best_2 <- getBestMPG( userInput_prob2 )
dplyr::filter()
Это то, что я не могу правильно запустить Я пробовал:
dplyr::filter( mpg > probColName )
- Нет ошибки, но строки не возвращены.
dplyr::filter( mpg > !!probColName )
- Нет ошибки, но строки не возвращены.
Я также видел примеры, где я мог передать что-то вродеquo(P95)
к функции, а затем кавычки в вызовеdplyr::filter()
; Я получил это на работу, но это не решает мою проблему, так как требует жесткого кодирования имени переменной вне функции. Например, если я делаю это, а процентиль, переданный пользователем, равен 0,90, то вызовdplyr::filter()
не удается, потому что созданный столбец называетсяP90
и нетP95
.
Любая помощь будет принята с благодарностью. Я надеюсь, что есть простое решение, которое я просто пропускаю.