Je cherche à ajouter une colonne qui est renommée en fonction de la valeur d'une chaîne dans la même ligne.
Par exemple, comment pourrais-je créer une nouvelle colonne qui affiche le nombre ou le texte à la toute fin de PlayerID dans ce tableau? En tant que tel, je veux ceci:
PlayerID NewColumn Hank Aaron + 7 7 Babe Ruth + 5 5 Ted Williams + 2i 2i Hank Aaron + Outfield Outfield Lou Gehrig + FirstBase FirstBase
Pour devenir ceci:
PlayerID Hank Aaron + 7 Babe Ruth + 5 Ted Williams + 2i Hank Aaron + Outfield Lou Gehrig + FirstBase
Comme vous pouvez le voir ci-dessus, j'ai besoin de tout après le signe plus pour être inclus dans la nouvelle colonne. Parfois, la valeur après le signe plus est un nombre, parfois ce sont des caractères et un nombre, et parfois ce ne sont que des caractères. Merci d'avance!
3 Réponses :
" + ".
df <- structure(list(PlayerID = c("Hank Aaron + 7", "Babe Ruth + 5",
"Ted Williams + 2i", "Hank Aaron + Outfield", "Lou Gehrig + FirstBase"
)), class = "data.frame", row.names = c(NA, -5L))
S'il n'y a qu'un seul mot après + , vous pouvez également utiliser stringr :: mot sans expression régulière pour obtenir le dernier mot.
stringr::word(df$PlayerID, -1)
data
sub('.*\\+\\s*', '', df$PlayerID)
p>
Ronak, comme toujours tu es incroyable. Merci.
Voici une stratégie avec tidyverse.
library(tidyverse)
PlayerID <- c(
"Hank Aaron + 7",
"Babe Ruth + 5",
"Ted Williams + 2i",
"Hank Aaron + Outfield",
"Lou Gehrig + FirstBase"
)
df <- data.frame(PlayerID, stringsAsFactors = F)
df %>%
separate(PlayerID,into = c('Player', 'a', 'newColumn'), fill = 'right') %>%
unite('Name',Player:a, remove = F, sep = ' ') %>%
select(-c(Player:a))
#> Name newColumn
#> 1 Hank Aaron 7
#> 2 Babe Ruth 5
#> 3 Ted Williams 2i
#> 4 Hank Aaron Outfield
#> 5 Lou Gehrig FirstBase
Si vous n'avez qu'un seul signe plus dans la colonne PlayerID , vous pouvez combiner sapply et strsplit dans la base R
df$NewColumn <- sapply(strsplit(df$PlayerID, split = " + ", fixed = TRUE), function(x) x[[2]]) df # PlayerID NewColumn # 1 Hank Aaron + 7 7 # 2 Babe Ruth + 5 5 # 3 Ted Williams + 2i 2i # 4 Hank Aaron + Outfield Outfield # 5 Lou Gehrig + FirstBase FirstBase
Logique essentiellement très similaire à celle-ci, mais peut-être pas exactement un doublon: stackoverflow.com/questions/10617702/... , éventuellement celui-ci à la place: stackoverflow.com/questions/25991824/...