J'ai un data.table avec une colonne de caractères et je souhaite sélectionner uniquement les lignes qui contiennent une sous-chaîne. Équivalent à SQL WHERE x LIKE '%substring%'
Par exemple.
> Months = data.table(Name = month.name, Number = 1:12)
> Months["mb" %in% Name]
Empty data.table (0 rows) of 2 cols: Name,Number
Comment sélectionner uniquement les lignes où Nom contient "mb"?
data.table
A une fonction like
.
Months[like(Name,"mb")]
Name Number
1: September 9
2: November 11
3: December 12
Ou, %like%
Est plus joli:
> Months[Name %like% "mb"]
Name Number
1: September 9
2: November 11
3: December 12
Notez que %like%
Et like()
utilisent grepl
(renvoie un vecteur logique) plutôt que grep
(renvoie des emplacements entiers). C'est ainsi qu'il peut être combiné avec d'autres conditions logiques:
> Months[Number<12 & Name %like% "mb"]
Name Number
1: September 9
2: November 11
et vous bénéficiez également de la puissance de la recherche d'expressions régulières (pas seulement des caractères génériques% ou *).
L'opérateur %in%
Ne fait pas de correspondance de chaîne partielle, il est utilisé pour rechercher si des valeurs existent dans un autre ensemble de valeurs, c'est-à-dire "a" %in% c("a","b","c")
Pour effectuer une correspondance partielle de chaînes, vous devez utiliser la fonction grep()
. Vous pouvez utiliser le grep
pour renvoyer un index de toutes les colonnes contenant "mb"
. Sous-ensemble ensuite les lignes par cet index
Months[grep("mb", Name)] # data.table syntax slightly easier