尝试使用 ldply 将列表转换为数据帧时出错(错误(函数(...,row.names = NULL,:参数暗示行数不同:)
Error when trying to convert a list to dataframe using ldply (Error in (function (..., row.names = NULL, :arguments imply differing number of rows: )
我正在尝试使用 RStudio 抓取足球队球员的标准统计数据。我能够将信息提取到列表中,但无法将它们可视化为数据框,它给了我这个错误(错误(函数(...,row.names = NULL,check.rows = FALSE , check.names = 真, :
参数意味着不同的行数:33、27、24、35、5、4、54、38、18、2、1)我是 R 的菜鸟,我想不出解决它的方法,这是我正在使用的代码,以及我试图从中提取数据的页面,非常欢迎任何帮助!!!
https://fbref.com/en/squads/2b390eca/2016-2017/Athletic-Bilbao
install.packages('rvest')
install.packages('plyr')
install.packages('dplyr')
library(rvest)
library(plyr)
library(dplyr)
years = c(2017:2018)
urls = list()
for (i in 1:length(years)) {
url = paste0('https://fbref.com/en/squads/2b390eca/',years[i],'-',years[i+1],'/Athletic-Bilbao')
urls[[i]] = url #https://fbref.com/en/squads/d5348c80/',years1[i],'-',years2[i+1],'/AEK-Athens
}
tbl = list()
years = 2017
j = 1
for (j in seq_along(urls)) {
tbl[[j]] = urls[[j]] %>%
read_html() %>%
html_nodes("table") %>%
html_table()
tbl[[j]]$Year = years
j = j+1
years = years+1
}
Data = ldply(tbl,data.frame)
我发现需要进行两个修复。
你的第二个 url 是错误的。我想,你想要 years[i] + 1
即在索引之外移动 + 1。然后你得到 2017-2018 和 2018-19.
其次,有许多 table 具有不同的行数和列数,当您只想要第一个(标准)时,您正试图将它们全部连接起来。如果您只想要第一个 table,那么使用 html_node
而不是 html_nodes
,即 html_node("table")
。
我也不确定年份列是否按照您预期的方式设置,因为您目前会得到 2019 年和 2020 年。我已经更改,所以您得到 2017 年和 2018 年。您不需要递增j
顺便说一句。
library(rvest)
library(plyr)
library(dplyr)
years = c(2017:2018)
urls = list()
for (i in 1:length(years)) {
url = paste0('https://fbref.com/en/squads/2b390eca/',years[i],'-',years[i] + 1,'/Athletic-Bilbao')
urls[[i]] = url
}
tbl = list()
for (j in seq_along(urls)) {
tbl[[j]] <- urls[[j]] %>%
read_html() %>%
html_node("table") %>%
html_table()
tbl[[j]]$Year = years[j]
}
data = ldply(tbl,data.frame)
我正在尝试使用 RStudio 抓取足球队球员的标准统计数据。我能够将信息提取到列表中,但无法将它们可视化为数据框,它给了我这个错误(错误(函数(...,row.names = NULL,check.rows = FALSE , check.names = 真, : 参数意味着不同的行数:33、27、24、35、5、4、54、38、18、2、1)我是 R 的菜鸟,我想不出解决它的方法,这是我正在使用的代码,以及我试图从中提取数据的页面,非常欢迎任何帮助!!!
https://fbref.com/en/squads/2b390eca/2016-2017/Athletic-Bilbao
install.packages('rvest')
install.packages('plyr')
install.packages('dplyr')
library(rvest)
library(plyr)
library(dplyr)
years = c(2017:2018)
urls = list()
for (i in 1:length(years)) {
url = paste0('https://fbref.com/en/squads/2b390eca/',years[i],'-',years[i+1],'/Athletic-Bilbao')
urls[[i]] = url #https://fbref.com/en/squads/d5348c80/',years1[i],'-',years2[i+1],'/AEK-Athens
}
tbl = list()
years = 2017
j = 1
for (j in seq_along(urls)) {
tbl[[j]] = urls[[j]] %>%
read_html() %>%
html_nodes("table") %>%
html_table()
tbl[[j]]$Year = years
j = j+1
years = years+1
}
Data = ldply(tbl,data.frame)
我发现需要进行两个修复。
你的第二个 url 是错误的。我想,你想要 years[i] + 1
即在索引之外移动 + 1。然后你得到 2017-2018 和 2018-19.
其次,有许多 table 具有不同的行数和列数,当您只想要第一个(标准)时,您正试图将它们全部连接起来。如果您只想要第一个 table,那么使用 html_node
而不是 html_nodes
,即 html_node("table")
。
我也不确定年份列是否按照您预期的方式设置,因为您目前会得到 2019 年和 2020 年。我已经更改,所以您得到 2017 年和 2018 年。您不需要递增j
顺便说一句。
library(rvest)
library(plyr)
library(dplyr)
years = c(2017:2018)
urls = list()
for (i in 1:length(years)) {
url = paste0('https://fbref.com/en/squads/2b390eca/',years[i],'-',years[i] + 1,'/Athletic-Bilbao')
urls[[i]] = url
}
tbl = list()
for (j in seq_along(urls)) {
tbl[[j]] <- urls[[j]] %>%
read_html() %>%
html_node("table") %>%
html_table()
tbl[[j]]$Year = years[j]
}
data = ldply(tbl,data.frame)