136 votes

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

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 cadre de données donné ? Par exemple, je souhaiterais savoir si une colonne colonne d existe dans le data.frame abcframe .

1 votes

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

0 votes

Je veux savoir si le cadre de données a un clou avec le nom d ou pas.

0 votes

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

231voto

En supposant que le nom de votre cadre de données est dat et que le nom de votre colonne à vérifier est "d" vous pouvez utiliser l'option %in% opérateur :

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

10 votes

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))

0 votes

Excellente réponse. Comment puis-je étendre cela si je cherche les colonnes 'd', 'e' et 'f' ? Est-ce que ce serait : 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/ .

8 votes

All(c("d", "e", "f") %in% colnames(dat))

31voto

Andrie Points 66979

Vous avez un certain nombre d'options, y compris 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"

Utilice %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 votes

Pour obtenir le grepl un peu plus précis, vous pourriez utiliser grepl("^d$",names(dat)) pour s'assurer qu'une colonne portant le nom dd ne renvoie pas TRUE .

0 votes

Merci pour ça, colnames n'a pas fonctionné pour moi mais names a fait.

0 votes

@Andrie : existe-t-il un moyen de comparer les colonnes de deux grands cadres de données pour voir quels noms de colonnes manquent dans l'autre colonne ?

10voto

Tomasz Pik Points 381

Vous pourriez utiliser any :

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

5voto

Jackson Points 1129

Vous pouvez également utiliser if(!is.null(abcframe$d)) pour vérifier si d existe 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")
}

3 votes

Il est intéressant de noter que cela échoue avec le tibble tidyverse, car le 'dat$d' déclenche un avertissement.

2voto

Agile Bean Points 417

Une approche tidyverse pourrait être plus lisible pour certaines personnes, et donc plus facile à retenir.

Vous recherchez la variable par str_detect qui renvoie un vecteur logique comme grepl puis de le réduire par la fonction de base R any qui renvoie VRAI s'il y avait au moins une valeur VRAIE.

dat %>% names %>% str_detect("d") %>% any()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X