2016-08-24 4 views
5

Я пытаюсь программно передать имена столбцов функции, чтобы их можно было выбрать в dplyr. Имена столбцов будут меняться, поэтому я попытался использовать стандартную оценочную версию функции выбора select_. Названия столбцов сами по себе немного забавны, так как они содержат + и - символов, что, я думаю, вызывает проблему. Ниже приведен простой пример, который реплицирует ошибку.как передать имена столбцов в dplyr select без оценки

library(tibble) 
library(dplyr) 
data <- data_frame(target_id = 'xyz', 
        `CH4+Sulfate-1` = 1.2, 
        `CH4+Sulfate-2` = 2, 
        `CH4+Sulfate-3` = 3) 
columns <- c('CH4+Sulfate-1', 'CH4+Sulfate-2', 'CH4+Sulfate-3') 
select_(data, .dots = columns) 

Я получаю следующее сообщение об ошибке

Error in eval(expr, envir, enclos) : object 'CH4' not found 

что приводит меня к мысли, что имена оцениваются, а не берется в качестве строки. Как я могу обойти эту проблему без переименования столбцов таблицы?

+1

Хммм .... хороший вопрос - 'данные [столбцы]' от базы R работает нормально, поэтому это не универсальная проблема. Вы также можете взломать его с помощью 'dplyr :: select (данные, совпадение (столбцы, имена (данные))), но я понятия не имею. – thelatemail

+2

Абсолютно минимального примера достаточно, чтобы его разбить - 'dat <- data.frame (\' A + B \ '= 1: 3, check.names = FALSE); select_ (dat, "A + B") ' – thelatemail

+0

Кажется, что' one_of' с 'select' может быть ответом в этих [типах ситуаций] (http://stackoverflow.com/questions/35839408/r-dplyr- drop-multiple-columns/35839679 # 35839679): 'select (data, one_of (columns))' – aosmith

ответ

2

Обнаруживание имен в обратных окнах выполняет эту работу.

columns <- c('`CH4+Sulfate-1`', '`CH4+Sulfate-2`', '`CH4+Sulfate-3`')