Pour savoir si une colonne existe ou non dans le bloc de données


110

J'ai un data.frame avec le nom "abcframe"

     a  b  c
     1  1  1
     2  2  3

Comment puis-je savoir si une colonne existe ou non dans un bloc de données donné? Par exemple, je voudrais savoir si une colonne d existe dans l'abcframe data.frame .


1
Voulez-vous savoir si votre bloc de données a une colonne avec un nom de d, ou voulez-vous savoir si un vecteur donné dest égal à l'une des colonnes de votre bloc de données?

je veux savoir si dataframe a un cloumn avec le nom d ou non
Sunny Sunny

Je vous souhaite une belle journée ensoleillée avec 100 votes! :-)
TMS

Réponses:


196

En supposant que le nom de votre bloc de données est datet que le nom de votre colonne à vérifier est "d", vous pouvez utiliser l' %in%opérateur:

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

6
si vous cherchez l'inverse, c'est à dire si la colonne n'est pas là, ajoutez simplement !au début:if(!"d"%in% colnames(dat))
toto_tico

Réponse géniale. Comment étendre cela si je recherche les colonnes «d» et «e» et «f»? Serait - ce: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Merci! - Oh, j'ai peut-être trouvé la réponse moi-même: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

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

24

Vous disposez d'un certain nombre d'options, notamment l'utilisation %in%et 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

Pour obtenir les noms des colonnes:

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

Utilisez %in%pour vérifier l'adhésion:

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

Or use `grepl` to check for a match:

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

11
Pour être greplun peu plus précis, vous pouvez utiliser grepl("^d$",names(dat)), pour vous assurer qu'une colonne avec un nom ddne retourne pas TRUE.
BenBarnes

Merci pour ça, ça colnamesn'a pas marché pour moi mais ça l'a namesfait.
Docconcoct

@Andrie existe-t-il un moyen de comparer les colonnes à deux grandes dataframes pour voir quels noms de colonne sont manquants dans l'autre colonne?
sar le

8

Vous pouvez utiliser any:

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

2

Vous pouvez également utiliser if(!is.null(abcframe$d))pour tester s'il dexiste dans 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
Fait intéressant, cela échoue avec le tibble tidyverse, car le 'dat $ d' lancera un avertissement.
miratrix
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.