1
votes

Comment créer une nouvelle colonne nommée en fonction de la valeur d'une autre colonne de la même ligne?

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!


1 commentaires

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/...


3 Réponses :


3
votes

" + ".

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>


1 commentaires

Ronak, comme toujours tu es incroyable. Merci.



0
votes

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


0 commentaires

1
votes

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


0 commentaires