首页 > 解决方案 > 在分隔符上拆分字符串

问题描述

我有一个数据框,其中的行如下所示:

Rank..Player      Pos Team PosRank
1. Le'Veon Bell    RB  PIT     RB1
2. Todd Gurley II  RB  LAR     RB2

问题是第一列中的数字和名称是一个字符串,有些名称中有句点,这使得将两者分开有点棘手:

18. A.J. Green  WR  CIN  WR7

我见过的所有解决方案都涉及拆分仅包含数字和字母的字符串。我需要一种方法来拆分第一列,而不会像上面那样拆分名称。

这是我用来从 ESPN 抓取数据的代码:

df <- read_html("http://www.espn.com/fantasy/football/story/_/page/
      18RanksPreseason300nonPPR/2018-fantasy-football-non-ppr-rankings-top-300")

ranks <- df %>%
  html_nodes("table.inline-table") %>%
  .[[2]] %>%
  html_table()

标签: rstringsplit

解决方案


我们可以使用sub创建一个delimiter然后将其分成两列read.csv

tmp <- read.csv(text=sub("^(\\d+)\\.\\s+(.*)", "\\1,\\2", 
             ranks[[1]]), header = FALSE, col.names =c("Rank", "Player"))
ranks1 <- cbind(tmp, ranks[-1])
head(ranks1, 2)
#   Rank         Player Pos Team PosRank
#1    1   Le'Veon Bell  RB  PIT     RB1
#2    2 Todd Gurley II  RB  LAR     RB2

或与separate

library(tidyr)
separate(ranks, `Rank, Player`, into = c("Rank", "Player"), sep="(?<=[0-9])\\.")

编辑:基于@AndS 评论


推荐阅读