【发布时间】:2018-06-11 16:40:59
【问题描述】:
我想创建一个数据框,其中包含对约 20 个变量的 > 100 个观察值。现在,这将基于保存到我的本地文件夹中的 html 文件列表。我想确保每个变量的正确值与每个观察值匹配。假设 R 将使用相同的文件顺序来构造每个变量,并且在出现错误或类似情况时不跳过变量,这应该会自动发生。 但是,是否有“保存方式”,这意味着在检索信息时将观察名称分配给每个变量值?
以我的示例代码来提取变量以使其更清晰:
#Specifying the url for desired website to be scrapped
url <- 'http://www.imdb.com/search/title?
count=100&release_date=2016,2016&title_type=feature'
#Reading the HTML code from the website
webpage <- read_html(url)
title_data_html <- html_text(html_nodes(webpage,'.lister-item-header a'))
rank_data_html <- html_text(html_nodes(webpage,'.text-primary'))
description_data_html <- html_text(html_nodes(webpage,'.ratings-bar+ .text-
muted'))
df <- data.frame(title_data_html, rank_data_html,description_data_html)
这将提供一个排名和描述数据列表,但不引用排名或描述的观察名称(在将其绑定到 df 之前)。现在,在我的实际代码中,一个变量突然出现了太多的 1 值,所以有 201 条描述,但只有 200 部电影。如果没有提及描述属于哪部电影,那么很容易看出为什么会发生这种情况。
一位同事建议一次提取 1 个观察的所有变量,并逐行扩展数据框(一次 1 个观察),而不是逐列扩展(一次 1 个变量),但发现错误并清理以这种方式增加每个变量的需求似乎更耗时。
在这种情况下,有没有人建议什么是“最佳实践”?
谢谢!
【问题讨论】:
-
这是一个令人困惑的问题。 “我想确保每个变量的正确值与每个观察值匹配。”是什么意思?如果您包含reproducible example,可能更容易弄清楚您想要什么。顺便说一句,您的示例代码不会做您认为它会做的事情。
for (i in <integer vector of length one>) <do something>将执行一次循环,i只有一个值。 -
@DanHall:我已经更新了我的描述,希望现在更清楚
标签: r dataframe web-scraping