我有一个数据框,其中的行如下所示:
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()
答案 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