如何在特定字符后删除 R 中字符串的 n 个字符?

How to remove n number of characters of a string in R after a specific character?

我的数据框是:

df <- data.frame(player = c("Taiwo Awoniyi/e5478b87", "Jacob Bruun Larsen/4e204552", "Andi Zeqiri/d01231f0"), goals = c(2,5,7))

我想删除“玩家”列中“/”后的所有数字。理想情况下:

df <- data.frame(player = c("Taiwo Awoniyi", "Jacob Bruun Larsen", "Andi Zeqiri"), goals = c(2,5,7))

我不确定如何处理这个问题,因为玩家名字的长度差异很大,而且有些数字比其他数字大。

使用 dplyr 作为管道和 mutate,我们可以 gsub /.

之后的所有内容
df %>% 
  mutate(player = gsub("\/.*", "", player))
              player goals
1      Taiwo Awoniyi     2
2 Jacob Bruun Larsen     5
3        Andi Zeqiri     7

我们可以使用 separate,添加 extra = 'drop'(非常感谢 Onyambu)

library(dplyr)
library(tidyr)

df %>% 
  separate(player, "player", sep="/", extra = 'drop')
              player goals
1      Taiwo Awoniyi     2
2 Jacob Bruun Larsen     5
3        Andi Zeqiri     7

您可以通过负字符 class 反向引用要保留的子字符串,允许除 /:

之外的任何字符
df %>%
  mutate(player = sub("([^/]+).*", "\1", player))
              player goals
1      Taiwo Awoniyi     2
2 Jacob Bruun Larsen     5
3        Andi Zeqiri     7

更简单地说,您可以删除任何 / 或数字:

df %>%
  mutate(player = gsub("[/0-9]", "", player))

base R语法中:

df$player <- gsub("[/0-9]", "", df$player)

使用基础 R.

transform(df, player=gsub('/.+', '', player))
#               player goals
# 1      Taiwo Awoniyi     2
# 2 Jacob Bruun Larsen     5
# 3        Andi Zeqiri     7