0
votes

Comment ne conserver que des signes de ponctuation spécifiques dans une colonne

Dans le texte de la colonne comment il est possible de supprimer toutes les remarques de ponctuation mais de ne conserver que le?

data.frame(id = c(1), text = c("keep??it"))

production attendue

data.frame(id = c(1), text = c("keep<>-??it--!@#"))


0 commentaires

4 Réponses :


0
votes

Une solution plus générale serait d'utiliser des commandes gsub imbriquées qui convertissent ? à une chaîne inhabituelle particulière (comme "foobar"), se débarrasse de toute ponctuation, puis écrit "foobar" à ? :

gsub("foobar", "?", gsub("[[:punct:]]", "", gsub("\\?", "foobar", df$text)))
#> [1] "keep??it"


0 commentaires

0
votes

En utilisant gsub vous pouvez faire:

gsub("(\\?+)|[[:punct:]]","\\1",df$text)

[1] "keep??it"


0 commentaires

0
votes

gsub('[[:punct:] ]+',' ',data) supprime toute ponctuation qui n'est pas ce que vous voulez.

Mais c'est:

library(stringr)
sapply(df, function(x) str_replace_all(x, "<|>|-|!|@|#",""))
     id  text      
[1,] "1" "a"       
[2,] "2" "keep??it"

Mieux IMO que les autres réponses car pas besoin d'imbrication, et vous permet de définir les caractères à sub .


0 commentaires

0
votes

Voici une autre solution utilisant l'anticipation négative:

df <- data.frame(id = c(1), text = c("keep<>-??it--!@#"))

La recherche négative affirme que le caractère suivant n'est pas un ? puis correspond à toute ponctuation.

Les données:

gsub("(?!\\?)[[:punct:]]", "", df$text, perl = T)
[1] "keep??it"


0 commentaires