Per scoprire se una colonna esiste o meno nel data frame


110

Ho un data.frame con il nome "abcframe"

     a  b  c
     1  1  1
     2  2  3

Come posso scoprire se una colonna esiste o meno in un dato frame di dati? Ad esempio, vorrei scoprire se esiste una colonna d nel data.frame abcframe .


1
Vuoi sapere se il tuo data frame ha una colonna con un nome di d, o vuoi sapere se un dato vettore è duguale a una delle colonne del tuo data frame?

voglio sapere se dataframe ha una cloumn con il nome d o no
Sunny Sunny

Ti auguro una bella giornata di sole con 100 voti! :-)
TMS

Risposte:


196

Supponendo che il nome del tuo data frame sia date che il nome della tua colonna da controllare sia "d", puoi usare l' %in%operatore:

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

6
se stai guardando l'inverso, cioè se la colonna non c'è, aggiungi !all'inizio:if(!"d"%in% colnames(dat))
toto_tico

Risposta fantastica. Come lo estendo se cerco le colonne "d", "e" e "f"? Vorrei che sia: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Grazie! - Oh, potrei aver trovato la risposta da solo: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

6
all (c ("d", "e", "f")% in% colnames (dat))
skan

24

Hai una serie di opzioni, incluso l'utilizzo %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"

Utilizzare %in%per verificare l'appartenenza:

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

Or use `grepl` to check for a match:

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

11
Per ottenere greplun po 'più preciso, potresti usare grepl("^d$",names(dat)), per assicurarti che una colonna con il nome ddnon ritorni TRUE.
BenBarnes

Grazie per questo, colnamesnon ha funzionato per me ma namesha funzionato.
Docconcoct

@Andrie c'è un modo per confrontare le colonne con due grandi dataframe per vedere quali nomi di colonna mancano dall'altra colonna?
sar

8

Potresti usare any:

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

2

Puoi anche usare if(!is.null(abcframe$d))per verificare se desiste in abcframe.

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

if (!is.null(dat$d)) {
  print("d exists")
} else {
  print("d does not exist")
}
if (!is.null(dat$a)) {
  print("a exists")
} else {
  print("a does not exist")
}

2
È interessante notare che questo fallisce con il tidyverse tibble, perché 'dat $ d' genererà un avviso.
miratrix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.