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 .

Ensoleillé Ensoleillé
la source
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");
}

la source
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
Andrie
la source
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
Tomasz Pik
la source
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")
}
Jackson
la source
2
Fait intéressant, cela échoue avec le tibble tidyverse, car le 'dat $ d' lancera un avertissement.
miratrix