Comment sélectionner les données R.lignes de table basées sur la correspondance de substring (comme la SQL))

j'ai une donnée.table avec une colonne de caractères, et veulent sélectionner seulement les lignes qui contiennent une sous-couche en elle. Équivalent à SQL WHERE x LIKE '%substring%'

E. G.

> Months = data.table(Name = month.name, Number = 1:12)
> Months["mb" %in% Name]
Empty data.table (0 rows) of 2 cols: Name,Number

Comment choisir seulement les lignes où le nom contient"mb"?

42
demandé sur Corone 2013-01-31 20:20:05

2 réponses

data.table possède une fonction like .

Months[like(Name,"mb")]
        Name Number
1: September      9
2:  November     11
3:  December     12

Ou, %like% ressemble plus belle :

> Months[Name %like% "mb"]
    Name Number
1: September      9
2:  November     11
3:  December     12

notez que %like% et like() utilisent grepl (renvoie le 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 obtenez la puissance de recherche d'expression régulière (pas seulement % ou * joker), trop.

75
répondu Matt Dowle 2013-01-31 16:56:07

l'opérateur %in% ne fait pas d'appariement partiel de chaîne il est utilisé pour trouver si des valeurs existent dans un autre ensemble de valeurs i.e. "a" %in% c("a","b","c")

pour faire une correspondance partielle de chaîne de caractères, vous devez utiliser la fonction grep() . Vous pouvez utiliser le grep pour retourner un index de toutes les colonnes avec "mb" . Puis sous-ensemble des lignes par cet index

Months[grep("mb", Name)]    # data.table syntax slightly easier
8
répondu LostLin 2013-01-31 16:39:50