1
votes

Comment puis-je sélectionner plusieurs colonnes avec un titre spécifique

J'ai un ensemble de données contenant des colonnes avec divers éléments et leur erreur

(par exemple Pb, Pb.error, Cu, Cu.error, Zn, Zn.error, Fe, Fe.error).

comment puis-je sélectionner plusieurs colonnes par leur nom (je veux sélectionner Pb, Pb.error, Zn, Zn.error par exemple)?

J'ai essayé: p >

subset(myData, select = c("Pb","Pb.Error","Zn","Zn.Error"))

qui fonctionne bien pour un élément et son erreur (je pourrais sélectionner Pb et Pb error).

mais cela ne fonctionne pas pour plusieurs éléments et leurs erreurs:

subset(myData, select = (grep("Pb", dataTitle)|grep("Zn", dataTitle)))

le code ci-dessus imprime tous les éléments que j'ai (c'est-à-dire qu'il n'a réussi à sélectionner aucune des colonnes spécifiques). Je suis très confus et je ne connais pas la raison.

J'ai aussi essayé

subset(myData, select = (grep("Pb", dataTitle)))

Cela fonctionne parfaitement pour moi, mais je me demandais si je pourrait le rendre plus simple, car je pense que "Pb" et "Pb.error" pourraient être sélectionnés en même temps.

r

0 commentaires

3 Réponses :


0
votes

Je viens de recevoir la réponse 1 min après avoir posé cette question. C'est facile si j'utilise simplement "Pb | Zn" dans la fonction grep

subset(myData, select(grep("Pb|Zn", dataTitle)))

Cela fonctionne parfaitement pour moi.


0 commentaires

0
votes

Cela fonctionne également, sauf si vous essayez spécifiquement d'appeler les colonnes d'erreur par leur association à leurs colonnes de données respectives:

myData[,c("Pb","Pb.Error","Zn","Zn.Error")]


1 commentaires

Oui, cela fonctionne bien, mais il y a en fait environ 10 éléments différents à citer, alors j'essayais d'éviter de les citer directement. Mais merci pour votre réponse! c'est plus soigné que le mien



0
votes

Voici une autre façon avec quelques restrictions supplémentaires sur l'expression régulière:

df <- tibble(
  Pb = NA, Pb.error = NA, Cu = NA, Cu.error = NA, Zn = NA, Zn.error = NA, Fe = NA, Fe.error = NA
)

df[, grepl("^(Pb|Zn).*$", names(df))]


0 commentaires