2015-12-30 16 views
8

Esiste un modo conciso per selezionare le colonne di un determinato tipo in dplyr? Ad esempio, come selezionare tutte le colonne di caratteri all'interno di una catena dplyr?dplyr - come selezionare le colonne di un certo tipo

+0

Non che la familiarità con il pacchetto dplyr. Ma puoi fare qualcosa del genere? Simile alla funzione 'class':' d <- tbl_df (iris); type_sum (d); seleziona (d, which (type_sum (d) == "dbl")) ' – Jimbou

risposta

21

Dplyr 0.5 ha la select_if() che consente di scrivere select_if(is.character)

+2

Questo rende il codice molto più pulito rispetto all'utilizzo di una domanda all'interno della catena dplyr! –

4

Un modo per procedere sarebbe innanzitutto ottenere le classi delle diverse colonne. Quindi, supponendo abbiamo alcuni dati:

library(dplyr) 
DT <- data.frame(A = letters[1:6], B = c(T,F,F), C = seq(1,2,length.out = 6), D = 1:6) 
dt <- tbl_df(DT) 
dt$A <- as.character(dt$A) 
uscita
 A  B  C  D 
    (chr) (lgl) (dbl) (int) 
1  a TRUE 1.0  1 
2  b FALSE 1.2  2 
3  c FALSE 1.4  3 
4  d TRUE 1.6  4 
5  e FALSE 1.8  5 
6  f FALSE 2.0  6 

Ora possiamo ottenere le classi utilizzando la funzione di che:

cls <- sapply(dt, class) 
cls 
uscita
 A   B   C   D 
"character" "logical" "numeric" "integer" 

Ora è dritto inoltro:

newDF <- dt %>% select(which(cls=="character")) 
newDF 
uscita
 A 
    (chr) 
1  a 
2  b 
3  c 
4  d 
5  e 
6  f 
+0

Nice - Sto cercando un modo per evitare di ottenere le classi al di fuori della catena dplyr. – paljenczy

12

Si può fare questo con

dt %>% select(which(sapply(.,is.character))) 
Problemi correlati