2017-08-22 6 views
0

Je dois détecter les lignes d'une df/dibule contenant une séquence de caractères spécifique.R: obtention d'une ligne de données avec des caractères spécifiques

seq <- "RT @AventusSystems" est ma séquence

df <- structure(list(text = c("@AventusSystems Wow, what a upgrade from help of investor", 
"RT @AventusSystems: A recent article about our investors as shown in Forbes! t.co/n8oGwiEDpu #Aventus #GlobalAdvisors #4thefans #Ti…", 
"@AventusSystems Very nice to have this project", "RT @AventusSystems: Join the #TicketRevolution with #Aventus today! #Aventus #TicketRevolution #AventCoin #4thefans t.co/OPlyCFmW4a" 
), Tweet_Id = c("898359464444559360", "898359342952439809", "898359326552633345", 
"898359268226736128"), created_at = structure(c(17396, 17396, 
17396, 17396), class = "Date")), .Names = c("text", "Tweet_Id", 
"created_at"), row.names = c(NA, -4L), class = c("tbl_df", "tbl", 
"data.frame")) 

select(df, contains(seq)) 
# A tibble: 4 x 0 

sapply(df$text, grepl, seq) retour seulement 4 FAUX

Que dois-je tort? Quelle est la bonne solution? Nous vous remercions de l'aide

+1

Est-ce que' grep (seq, df $ text) 'le faire pour vous ? – csgroen

+1

Ou si vous voulez les lignes de trame de données qui contiennent ces caractères, 'filter (df, grepl (seq, text))' –

+0

@cs groen oui il fait le job.TY – gabx

Répondre

2

D'abord, grepl est déjà vectorisé sur son argument x, de sorte que vous n'avez pas besoin sapply. Vous pouvez simplement faire grepl(seq, df$text).

Pourquoi votre code ne fonctionne pas est que sapply passe chaque élément de l'argument X à la fonction dans FUN argument comme premier argument (si vous êtes à la recherche du modèle de recherche « @AventusSystems Wow, quelle mise à niveau de l'aide des investisseurs », etc. dans votre objet seq.

Enfin, dplyr::select sélectionne des colonnes, alors que vous souhaitez utiliser dplyr::filter, qui filtre les lignes.