Je veux sélectionner des lignes à partir d'un bloc de données basé sur une correspondance partielle d'une chaîne dans une colonne, par exemple la colonne «x» contient la chaîne «hsa». En utilisant sqldf
- s'il avait une like
syntaxe - je ferais quelque chose comme:
select * from <> where x like 'hsa'
.
Malheureusement, sqldf
ne prend pas en charge cette syntaxe.
Ou de même:
selectedRows <- df[ , df$x %like% "hsa-"]
Ce qui, bien sûr, ne fonctionne pas.
Quelqu'un peut-il m'aider s'il vous plaît?
dput(head(conservedData))
.Réponses:
Je remarque que vous mentionnez une fonction
%like%
dans votre approche actuelle. Je ne sais pas si c'est une référence au%like%
"data.table" de from, mais si c'est le cas, vous pouvez certainement l'utiliser comme suit.Notez que l'objet n'a pas besoin d'être a
data.table
(mais rappelez-vous également que les approches de sous-ensembles pourdata.frame
s etdata.table
s ne sont pas identiques):Si c'est ce que vous aviez, alors peut-être que vous aviez juste mélangé les positions de ligne et de colonne pour les données de sous-ensemble.
Si vous ne souhaitez pas charger un package, vous pouvez essayer d'utiliser
grep()
pour rechercher la chaîne que vous correspondez. Voici un exemple avec l'mtcars
ensemble de données, où nous faisons correspondre toutes les lignes dont les noms de ligne incluent "Merc":Et, un autre exemple, en utilisant l'
iris
ensemble de données recherchant la chaîneosa
:Pour votre problème, essayez:
la source
grep
prend en charge les expressions régulières, vous pouvez donc utiliser un grep à la^hsa-
place.grep
vient de la commande ed g / re / p (global / expression régulière / impression), et il ne révèle sa vraie puissance qu'au maître de l'expression régulière-fu ;-): en.wikipedia.org/ wiki / GrepEssayez à
str_detect()
partir du package stringr , qui détecte la présence ou l'absence d'un modèle dans une chaîne.Voici une approche qui intègre également le
%>%
pipe etfilter()
du package dplyr :Cela filtre le jeu de données échantillon CO2 (fourni avec R) pour les lignes où la variable Traitement contient la sous-chaîne "non". Vous pouvez ajuster si
str_detect
trouve des correspondances fixes ou utilise une expression régulière - voir la documentation du package stringr.la source
myDataFrame[str_detect(myDataFrame$key, myKeyPattern),]
LIKE
devrait fonctionner dans sqlite:la source
require()
icirequire
fonction.