2015-01-06 5 views
5

У меня есть таблица данных с большим количеством столбцов, глядя, как это:Выбор с dplyr параметрами в именах столбцов

sd1_scale1 sd1_scale2 sd1_scale3 ... sd2_scale1 sd2_scale2 ... так далее

I манипулировать эти данные с dplyr и использовать выбор таким образом:

select(code_group, sd1_scale1:sd1_scale13) 

Я хочу, чтобы написать функцию, которая принимает номер (номер сд) и выбирает столбцы этим, то Лоо король вот так:

makeData <- function(sdNumber) { 

     return select(code_group, sd{sdNumber}_scale1:sd{sdNumber}_scale13) 

    } 

Можно ли использовать dplyr? Я не смог перейти в отдельные индексы столбцов, поэтому я понятия не имею, как это сделать. Заранее спасибо!

+1

Используйте '' paste' и select_'. – Gregor

+0

Насколько я понял, пасты работают для конкатенации строки в R, и я не нашел в help select_ function, может быть, вы имеете в виду select_vars? И как передать это выражение sd1_scale1: sd1_scale13 на select_vars? –

+1

Убедитесь, что ваш 'dplyr' обновлен. 'select_()' - это версия 'select()', которая принимает строки в качестве аргументов. Большинство функций 'dplyr' имеют версию, заканчивающуюся символом подчеркивания, который ожидает строки. – Gregor

ответ

11

Вы можете использовать select_, как предложил Грегор, но вам не обязательно.

library(dplyr) 

x <- read.csv(text = "sd1_scale1,sd1_scale2,sd1_scale3,sd2_scale1,sd2_scale2,sd2_scale3 
1,2,3,4", header = TRUE) 


makeData1 <- function(x, sdNumber) { 
    # Using `one_of` as explained in ?select 
    select(x, one_of(paste0("sd", sdNumber, "_scale", 1:2))) 
} 

makeData2 <- function(x, sdNumber) { 
    # Same effect using nonstandard evaluation, see vignette("nse") 
    select_(x, .dots = paste0("sd", sdNumber, "_scale", 1:2)) 
} 

x %>% makeData1(2)  
x %>% makeData2(2) # same result 

Я получил это от this gist

+0

Exellect! Ваше решение работало даже в очень сложном случае с цепочкой. Большое спасибо! –

+0

Я получаю сообщение об ошибке x «Ошибка в сканировании (файл ... строка 1 не содержит 6 элементов» –

+1

@MikeHoney Трудно скопировать/вставить вкладки. Я изменил их на запятые. – nacnudus

Смежные вопросы