Comment supprimer les n derniers caractères de chaque élément du vecteur R

Je suis très novice en R et je n’ai pas trouvé d’exemple simple en ligne sur la façon de supprimer les n derniers caractères de chaque élément d’un vecteur (tableau?)

Je viens d’un contexte Java, donc ce que je voudrais faire, c’est parcourir chaque élément d’ a$data et supprimer les 3 derniers caractères de chaque élément.

Comment vas-tu t’y prendre?

Voici un exemple de ce que je ferais. J’espère que c’est ce que vous cherchez.

 char_array = c("foo_bar","bar_foo","apple","beer") a = data.frame("data"=char_array,"data2"=1:4) a$data = substr(a$data,1,nchar(a$data)-3) 

a devrait maintenant contenir:

  data data2 1 foo_ 1 2 bar_ 2 3 ap 3 4 b 4 

Voici un moyen avec gsub :

 cs <- c("foo_bar","bar_foo","apple","beer") gsub('.{3}$', '', cs) # [1] "foo_" "bar_" "ap" "b" 

Bien que ce soit la même chose avec la réponse de @nfmcclure, je préfère utiliser le paquet ssortingngr car il fournit un ensemble de fonctions dont les noms sont les plus cohérents et descriptifs que ceux de la base R (en fait, je google toujours) des caractères dans R “ comme je ne me souviens pas du nom nchar() ).

 library(ssortingngr) str_sub(iris$Species, 1, str_length(iris$Species)-3) 

Cela supprime les 3 derniers caractères de chaque valeur dans la colonne Species .

La même chose peut être obtenue avec le paquet ssortingngi :

 library('ssortingngi') char_array <- c("foo_bar","bar_foo","apple","beer") a <- data.frame("data"=char_array, "data2"=1:4) (a$data <- stri_sub(a$data, 1, -4)) # from the first to the last but 4th char ## [1] "foo_" "bar_" "ap" "b" 

Similaire à @Matthew_Plourde en utilisant gsub

Cependant, en utilisant un modèle qui ramènera les caractères à zéro, c’est-à-dire retourner “” si la chaîne d’origine est plus courte que le nombre de caractères à couper:

 cs <- c("foo_bar","bar_foo","apple","beer","so","a") gsub('.{0,3}$', '', cs) # [1] "foo_" "bar_" "ap" "b" "" "" 

La différence est que {0,3} quantifier indique 0 à 3 correspondances, tandis que {3} nécessite exactement 3 correspondances, sinon aucune correspondance n'est trouvée, auquel cas gsub renvoie la chaîne originale non modifiée.

NB: utiliser {,3} serait équivalent à {0,3} , je préfère simplement cette dernière notation.

Voir ici pour plus d'informations sur les quantificateurs regex: https://www.regular-expressions.info/refrepeat.html