Créer une nouvelle colonne avec dplyr de muter et de sous-chaîne de la colonne existante

J'ai un dataframe avec une colonne de chaînes et souhaitez extraire des sous-chaînes de ces dans une nouvelle colonne.

Voici un exemple de code et les données montrant que je veux prendre de la chaîne après le dernier caractère de soulignement dans le id colonne afin de créer un new_id colonne.
Le id entrée de la colonne a toujours 2 caractères de soulignement et c'est toujours la dernière sous-chaîne que j'aimerais.

df = data.frame( id = I(c("abcd_123_ABC","abc_5234_NHYK")), x = c(1.0,2.0) )

require(dplyr)

df = df %>% dplyr::mutate(new_id = strsplit(id, split="_")[[1]][3])

Je m'attendais à strsplit d'agir sur chaque ligne à son tour.

Cependant, la new_id colonne ne contient que ABC dans chaque ligne, alors que je voudrais ABC dans la ligne 1 et NHYK dans la ligne 2. Savez-vous pourquoi cela échoue et la façon d'atteindre ce que je veux?

c'est en raison de votre appel à strsplit. le [[1]] attrape toujours le premier élément de la liste.
dans la base de R, c'est aussi simple que d'une petite regex magie: df$newVar <- sub(".*_([A-Z]+)$", "\\1", df$id).

OriginalL'auteur PM. | 2017-02-01