Filtre & sous-ensemble si une Chaîne Contient Certains Caractères (dans R)
Actuellement, je souhaite diviser un bloc de données en sous-ensembles pour la formation/test. Dans le bloc de données, il y a des colonnes qui contiennent des éléments différents, et certains contenir des sous-éléments comme (Aisle01, Aisle02, etc.) Je suis fauché par le filtrage d'une chaîne partielle dans plusieurs colonnes.
Échantillon de données:
Column1 Column2 Column3
Wall01 Wall04 45.6
Wall04 Aisle02 65.7
Aisle06 Wall01 45.0
Aisle01 Wall01 33.3
Wall01 Wall04 21.1
Si mon bloc de données (x) contient deux colonnes que dans celles-ci contiennent plusieurs version de "Allée", je voudrais filtrer le tout à partir de deux colonnes qui contient "Allée". Vous vous demandez si la ligne ci-dessous est un peu sur la bonne voie?
filtre(x, colonne1 & colonne2 == grep ($x colonne1 &$x colonne2, "Allée"))
Résultat souhaité:
Column1 Column2 Column3
Wall04 Aisle02 65.7
Aisle06 Wall01 45.0
Aisle01 Wall01 33.3
Vous en remercie d'avance.
- Veuillez fournir une reproduit exemple. Vous pouvez utiliser
dput
sur votre ensemble de données (ou les quelques premières lignes de celui-ci) afin que nous puissions voir ce que vous êtes en train de parler, et puis à la fin de montrer ce que votre résultat souhaité serait sur cet ensemble de données.
Vous devez vous connecter pour publier un commentaire.
La solution la plus simple que je peux voir est celle-ci:
À l'aide de
grepl
au lieu degrep
produit une logique de sorte que vous pouvez utiliser le|
opération pour sélectionner des lignes. Aussi, je voulais juste faire très rapidement quelques endroits dans votre code qui peut vous donner des problèmes.La
x$column1 & x$column2
dans le début de votregrep
déclaration signifie que la fonction va essayer d'exécuter le&
fonctionnement par paires sur chacune des entrées danscolumn1
etcolumn2
. Puisque ce sont les personnages et pas de partitions logiques contenues, cela va produire certains des résultats bizarres.Dans
grep
lapattern
vous essayez de faire correspondre vient avant la chaîne de caractères que vous essayez de faire correspondre, de sorte qu'il devrait êtregrep("Aisle", columnValue)
non l'inverse. L'exécution de?functionName
vous donne l'information à propos de la fonction de sorte que vous n'avez pas à essayer et à comprendre cela à partir de la mémoire.filter
est une fonction du temps de la série (ts
) des objets, pas des trames de données. Je suis surpris que vous n'obtenez pas une erreur en l'utilisant de cette façon.Meilleur de la chance. Commentaire si vous le souhaitez rien précisé.
x[["isAisle"]] <- grepl("Aisle", x[["column1"]]) | grepl("Aisle", x[["column2"]])
ColumnX
avec un capitole "C", mais votre exemple de code eu commecolumnX
avec une minuscule. Si vous utilisezdput
de façon reproductible la production de vos données, je peux plus, mais je ne peux pas de bug rien à partir de ce que vous avez fourni.