2015-01-06 17 views
5

devo tabella di dati con un sacco di colonne in cerca in questo modo:Selezione con dplyr dai parametri in nomi delle colonne

sd1_scale1 sd1_scale2 sd1_scale3 ... sd2_scale1 sd2_scale2 ... così via

I manipolare questi dati con dplyr e utilizzare selezionate in questo modo:

select(code_group, sd1_scale1:sd1_scale13) 

voglio scrivere funzione che prende il numero (numero sd) e seleziona le colonne da questo, qualcosa di loo re come questo:

makeData <- function(sdNumber) { 

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

    } 

È possibile fare con dplyr? Non sono riuscito a passare a determinati indici di colonne, quindi non ho idea di come farlo. Grazie in anticipo!

+1

Usa '' paste' e select_'. – Gregor

+0

Per quanto ho capito, paste funziona per concatenare la stringa in R, e non ho trovato in help select_ function potresti voler dire select_vars? E come passare questa espressione sd1_scale1: sd1_scale13 a select_vars? –

+1

Assicurati che il tuo 'dplyr' sia aggiornato. 'select _()' è una versione di 'select()' che prende le stringhe come argomenti. La maggior parte delle funzioni 'dplyr' ha una versione che termina con un trattino basso che si aspetta delle stringhe. – Gregor

risposta

11

È possibile utilizzare select_ come suggerito da Gregor, ma non è necessario.

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 

ho ricevuto questo da this gist

+0

Exellect! La tua soluzione ha funzionato anche in caso molto complicato con il concatenamento. Molte grazie! –

+0

Viene visualizzato un errore x "Errore nella scansione (file ... la riga 1 non ha 6 elementi" –

+1

@MikeHoney È difficile copiare/incollare le schede. Le ho cambiate in virgole. – nacnudus

Problemi correlati