Eu quero selecionar linhas de um quadro de dados com base na correspondência parcial de uma string em uma coluna, por exemplo, a coluna 'x' contém a string "hsa". Usando sqldf
- se tivesse uma like
sintaxe - eu faria algo como:
select * from <> where x like 'hsa'
.
Infelizmente, sqldf
não oferece suporte a essa sintaxe.
Ou da mesma forma:
selectedRows <- df[ , df$x %like% "hsa-"]
O que, claro, não funciona.
Alguém pode me ajudar com isso?
dput(head(conservedData))
.Respostas:
Percebi que você mencionou uma função
%like%
em sua abordagem atual. Eu não sei se isso é uma referência ao%like%
from "data.table", mas se for, você pode definitivamente usá-lo da seguinte maneira.Observe que o objeto não precisa ser um
data.table
(mas lembre-se também de que as abordagens de subconjuntos paradata.frame
s edata.table
s não são idênticas):Se isso é o que você tinha, então talvez você tenha apenas misturado posições de linha e coluna para subconjunto de dados.
Se não quiser carregar um pacote, você pode tentar usar
grep()
para pesquisar a string que está correspondendo. Aqui está um exemplo com omtcars
conjunto de dados, onde estamos combinando todas as linhas em que os nomes das linhas incluem "Merc":E, outro exemplo, usando o
iris
conjunto de dados procurando pela stringosa
:Para o seu problema, tente:
fonte
grep
suporta expressões regulares, então você pode querer usar o grep^hsa-
.grep
vem do comando ed g / re / p (global / expressão regular / imprimir), e revela seu poder real apenas para o mestre da expressão regular-fu ;-): en.wikipedia.org/ wiki / GrepExperimente
str_detect()
o pacote stringr , que detecta a presença ou ausência de um padrão em uma string.Aqui está uma abordagem que também incorpora o
%>%
tubo efilter()
do pacote dplyr :Isso filtra o conjunto de dados de amostra de CO2 (que vem com R) para linhas em que a variável de tratamento contém a substring "não". Você pode ajustar se
str_detect
encontra correspondências fixas ou usa uma regex - consulte a documentação do pacote stringr.fonte
myDataFrame[str_detect(myDataFrame$key, myKeyPattern),]
LIKE
deve funcionar em sqlite:fonte
require()
aquirequire
função.