我希望添加一列,该列根据同一行中的字符串值进行重命名。
例如,如何创建一个新列,在此表的PlayerID的末尾显示数字或文本?因此,我想要这样:
PlayerID
Hank Aaron + 7
Babe Ruth + 5
Ted Williams + 2i
Hank Aaron + Outfield
Lou Gehrig + FirstBase
要成为这个人
PlayerID NewColumn
Hank Aaron + 7 7
Babe Ruth + 5 5
Ted Williams + 2i 2i
Hank Aaron + Outfield Outfield
Lou Gehrig + FirstBase FirstBase
如您在上面看到的,我需要将加号后的所有内容包括在新列中。有时加号后的值是数字,有时是字符和数字,有时只是字符。 预先感谢!
答案 0 :(得分:3)
您可以使用正则表达式捕获加号({{1)}之后的所有内容:
+
反之,而不是捕获,请删除所有df$newcol <- sub('.*\\+\\s*(.*)$', '\\1', df$PlayerID)
df$newcol
#[1] "7" "5" "2i" "Outfield" "FirstBase"
。
"+"
如果sub('.*\\+\\s*', '', df$PlayerID)
之后只有一个单词,您也可以使用不带正则表达式的+
来获取最后一个单词。
stringr::word
数据
stringr::word(df$PlayerID, -1)
答案 1 :(得分:1)
如果PlayerID
列中只有一个加号,则可以在基数R中组合sapply
和strsplit
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
答案 2 :(得分:0)
这是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