使用rvest爬取的DataFrame无法通过subset函数筛选,报“对象未找到”错误求助
rvest爬取的DataFrame无法通过subset函数筛选,报“对象未找到”错误求助
嗨,我来帮你搞定这个问题!你遇到的核心问题其实是**html_table()返回的不是单个数据框,而是一个列表**——因为网页里可能存在多个表格,rvest会把所有表格都装进列表里返回,而你直接用subset()去操作列表,自然找不到对应的列名啦。
你可以先验证一下:在代码里加一行class(table),运行后会发现结果是"list",而不是你以为的"data.frame"。这就是为什么用iris测试没问题(iris本身就是数据框),但爬取的表格不行。
解决方法很简单,只需要先从列表里提取出你需要的那个数据框就行:
步骤1:提取目标数据框
网页里看起来只有一个表格,所以直接取列表的第一个元素就好,用双重方括号[[1]]来提取(单括号[1]还是返回列表,双重括号才会返回里面的data.frame):
library(rvest) html_content <- read_html("https://ki.ujep.cz/cs/historie/") # 提取列表中的第一个表格,转为数据框 df <- html_table(html_content, header = TRUE)[[1]]
步骤2:用subset筛选数据
现在df就是标准的数据框了,再用subset()就不会报错啦:
print(subset(df, subset = `Dosud na UJEP?` == "ANO"))
额外提示
如果网页里有多个表格,你可以先用str(table)查看列表里每个元素的结构,找到你需要的表格对应的索引,再用[[索引]]提取就行。
备注:内容来源于stack exchange,提问作者Игорь Блохин
相关产品推荐
相关产品推荐

