在R中,我使用readHTMLTable
来读取网络中的表格。我想要的表格出现在索引16和17,[[16]]
& [[17]]
。
以下是您可以使用的小数据样本:
这些是包含HTML表格的一些网址。
url1 = "http://www.basketball-reference.com/leagues/NBA_1980.html"
url2 = "http://www.basketball-reference.com/leagues/NBA_1981.html"
url3 = "http://www.basketball-reference.com/leagues/NBA_1982.html"
在这里,我在表格中读到了名为x1,x2和x3的变量。
x1 = readHTMLTable(url1)
x2 = readHTMLTable(url2)
x3 = readHTMLTable(url3)
如果您查看每个summary(x1)
,summary(x2)
,summary(x3)
的摘要并倒计时索引,我想要的表格就是名为" team& #34;和"对手",发生在第16行和第17行。
我一直在尝试编写一个循环,循环使用这些循环并命名"团队"表格分别来自名为team.1980
,team.1981
和team.1982
的变量。 "对手"表格将遵循相同的趋势opp.1980
,依此类推。
这是我一直在尝试的循环代码:
for(i in 1:3) {
for (j in 1980:1982) {
nam1 = paste0("team.", j)
nam2 = paste0("opp.", j)
assign(nam1, paste0("x.", i)[[16]])
assign(nam2, paste0("x.", i)[[17]])
}
}
我认为这个循环背后的理论是有效的,但问题出现在两个assign
函数中:
assign(nam1, paste0("x.", i)[[16]])
assign(nam2, paste0("x.", i)[[17]])
当我运行循环时,我收到错误消息
Error in paste0("x.", i)[[16]] : subscript out of bounds
如果我刚刚运行,那就是我得到的错误:
paste0("x", 1)[[16]]
> paste0("x", 1)[[16]]
Error in paste0("x", 1)[[16]] : subscript out of bounds
所以我很确定这就是我的问题所在。有谁知道如何循环变量并从每个变量中提取索引?
请记住,我是R的新手,所以简单性会非常感激!提前谢谢!
答案 0 :(得分:1)
readHTMLTable()
的输出是一个列表,元素可以按名称引用;索引是不必要的。 (虽然你可以使用它。)
假设您的帖子中定义了x1
,x2
和x3
。然后你可以这样做:
for (i in 1:3) {
year <- 1980 + i - 1
eval(parse(text=paste0("team.", year, " <- x", i, '[["team"]]')))
eval(parse(text=paste0("opp.", year, " <- x", i, '[["opponent"]]')))
}
这将评估在循环中动态构建的已解析文本。它创建了6个数据框:1980年至1982年的team.1980
和opp.1980
。
让我们仔细看看它在做什么......
首先使用paste0()
构造一个字符串,将值连接成一个没有分隔符的字符串。在第一次迭代中对paste0()
的第一次调用产生了这个字符串:
'team.1980 <- x1[["team"]]'
对此调用parse()
告诉R将该字符串转换为名为 expression 的对象。可以使用eval()
评估表达式。因此,此字符串将变为R语句并执行,从而分配team.1980
。
此过程将继续进行3次迭代。
这可能不是最好的方法,但它应该适用于您的情况。我假设你不仅仅是这6个,否则你也可以把它们写成个人作业。