2012-04-23 10 views
67

ho un data.frame con il nome "abcframe"per trovare se esiste una colonna in frame di dati o no

 a b c 
    1 1 1 
    2 2 3 

Come potrei trovare se esiste una colonna o meno in un determinato lasso di dati? Ad esempio, mi piacerebbe scoprire se esiste una colonna d nel data.frame abcframe.

+0

Vuoi sapere se il frame di dati ha una colonna con un nome di 'd', o vuoi sapere se un dato vettore 'd 'è uguale a una delle colonne del tuo frame dati? –

+0

voglio sapere se dataframe ha una cloumn con nome d oppure no –

risposta

115

Supponendo che il nome del data frame è dat e che il nome di colonna da controllare è "d", è possibile utilizzare l'%in% dell'operatore:

if("d" %in% colnames(dat)) 
{ 
    cat("Yep, it's in there!\n"); 
} 
+1

grazie, hai risolto il mio problema. –

+2

L'uomo ora si dawg! (in altre parole, grazie!) –

+2

se stai cercando l'inverso, cioè se la colonna non è lì, aggiungi '!' all'inizio: 'if (!" d "% in% colnames (dat))' –

19

Si dispone di un certo numero di opzioni, tra cui l'uso %in% e grepl :

dat <- data.frame(a=1:2, b=2:3, c=4:5) 
dat 
    a b c 
1 1 2 4 
2 2 3 5 

per ottenere i nomi delle colonne:

names(dat) 
[1] "a" "b" "c" 

Usa %in% per controllare per l'adesione:

"d" %in% names(dat) 
[1] FALSE 

Or use `grepl` to check for a match: 

grepl("d", names(dat)) 
[1] FALSE FALSE FALSE 
+10

Per ottenere il 'grepl' un po 'più preciso, è possibile utilizzare' grepl ("^ d $", nomi (dat)) ', per garantire che una colonna con nome' dd' non restituisca 'TRUE'. – BenBarnes

+0

Grazie per questo, 'colnames' non ha funzionato per me, ma' names' ha fatto. – Docconcoct

0

Si potrebbe utilizzare any:

> names(dat) 
[1] "a" "b" "c" 
> any(names(dat) == 'b') 
[1] TRUE 
> any(names(dat) == 'B') 
[1] FALSE 
Problemi correlati