我正在尝试转换从图书存储区中删除的数据,将图书销售成数字数据,以便我可以绘制图形。
我的代码目前是:
selector <- ".rrp"
library(rvest)
url <- "https://www.bookdepository.com/bestsellers"
doc <- read_html(url)
prices <- html_nodes(doc, selector)
html_text(prices)
library(readr)
Spiral <- read_csv("C:/Users/Ellis/Desktop/INFO204/Spiral.csv")
View(Spiral)
我试图清理数据:
text <- gsub('[$NZ]', '', Spiral) # removes NZ$ from data
但数据现在看起来像这样:
[1] "c(\"16.53\", \"55.15\", \"36.39\", \"10.80\", \"27.57\", \"34.94\",
\"27.57\", \"22.06\", \"22.00\", \"16.20\", \"22.06\", \"22.06\",
\"19.84\", \"19.81\", \"27.63\", \"22.06\", \"10.80\", \"27.57\",
\"22.06\", \"22.94\", \"16.53\", \"25.36\", \"27.57\", \"11.01\",
\"14.40\", \"15.39\")"
当我尝试跑步时:
as.numeric(text)
我明白了:
Warning message: NAs introduced by coercion
如何以这样的方式清理数据:NZ$
从价格中删除,我可以绘制'清理数据'
答案 0 :(得分:1)
您有一个包含代码的字符串,而不是数字。您需要先评估代码。
as.numeric(eval(parse(text=text)))
[1] 16.53 55.15 36.39 10.80 27.57 34.94 27.57 22.06 22.00 16.20 22.06 22.06 19.84
[14] 19.81 27.63 22.06 10.80 27.57 22.06 22.94 16.53 25.36 27.57 11.01 14.40 15.39
答案 1 :(得分:1)
获得预期结果的几个选项:
# option 1
as.numeric(gsub('(\\d+.\\d+).*', '\\1', html_text(prices)))
# option 2
as.numeric(gsub('\\s.*$', '', html_text(prices)))
# option 3
library(readr)
parse_number(html_text(prices))
所有结果都是:
[1] 21.00 9.99 31.49 19.49 6.49 13.50 22.49 11.99 11.49 7.99 10.99 7.99 10.99 9.99 7.99 9.99 11.49 8.49 11.99 9.99 14.95 8.99 20.13 13.50 8.49 6.49
注意:
,
中为逗号(html_text(prices)
)时,前两个选项可以更改为as.numeric(gsub('(\\d+),(\\d+).*', '\\1.\\2', html_text(prices)))
以获得正确的结果。在这种情况下,第三个选项应更改为:parse_number(html_text(prices), locale = locale(decimal_mark = ','))