如何根据刮取结果中的符号将R中的列分为两部分?

时间:2019-04-09 15:42:26

标签: r dataframe split

因此,我使用rvest抓取了IMDB网站,并遇到了一些分裂问题。我尝试了其他方法来拆分列,但都失败了。

这是我用于从IMDB网站抓取信息的代码:

votes_gross <- pagesource %>% html_nodes(".sort-num_votes-visible") %>% html_text()

然后我使用以下代码进行清理和拆分:

votes_gross <- gsub("\r?\n|\r", " ", votes_gross)
votes_gross <- data.frame(votes_gross)
library(tidyr)
votes_gross <- separate(votes_gross,
       col = "votes_gross",
       into = c("Votes", "Gross"),
       sep = "|")

我执行单独的代码后,数据框立即变为空。我也尝试使用strsplit,但也失败了。我知道这里还有其他类似的问题,但它们似乎与我的情况不相似。

我希望做这些:

          votes_gross
Votes: 489,547 | Gross: $700.06M
Votes: 615,401 | Gross: $678.82M
Votes: 192,034 | Gross: $608.58M

进入这些:

    Votes         Gross (Millions)
Votes: 489,547    Gross: $700.06
Votes: 615,401    Gross: $678.82
Votes: 192,034    Gross: $608.58

谢谢

1 个答案:

答案 0 :(得分:2)

根据?separate

  

sep-如果为character,则解释为正则表达式。默认值为正则表达式,可匹配任何非字母数字值序列。

因此,如果我们需要它按字面值求值,请将其放在方括号([|]或转义\\|)内,否则将其视为OR

library(tidyverse)
votes_gross <- separate(votes_gross,
   col = "votes_gross",
   into = c("Votes", "Gross"),
   sep = "\\s*[|]\\s*")