在定界符上分割字符串

时间:2018-08-10 01:46:26

标签: r string split

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

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()

2 个答案:

答案 0 :(得分:2)

我们可以使用y创建一个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

编辑:基于@AndS注释

答案 1 :(得分:2)

以下是使用strsplit的一种选择:

df <- data.frame(x <- "2. Todd Gurley II", stringsAsFactors=FALSE)
out <- strsplit(df$x, "(?<=\\d)\\.\\s+", perl=TRUE)
df <- data.frame(df, do.call(rbind, out))
names(df) <- c("RankPlayer", "Rank", "Player")
df

         RankPlayer Rank         Player
1 2. Todd Gurley II    2 Todd Gurley II

Demo