【问题标题】:Error when trying to convert a list to dataframe using ldply (Error in (function (..., row.names = NULL, :arguments imply differing number of rows: )尝试使用 ldply 将列表转换为数据框时出错((函数中的错误(...,row.names = NULL,:arguments 暗示不同的行数:)
【发布时间】:2020-07-07 13:38:51
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: r dataframe web-scraping rvest


    【解决方案1】:

    我看到了两个需要的修复。

    您的第二个网址是错误的。我想,你想要years[i] + 1,即在索引之外移动 + 1。然后你会得到 2017-2018 和 2018-19。

    其次,有许多表具有不同数量的行和列,当您只想要第一个(标准)时,您正试图将它们全部连接起来。如果您只想要第一个表,请使用html_node 而不是html_nodes,即html_node("table")

    我也不确定年份列是否设置为您想要的方式,因为您目前将获得 2019 年和 2020 年。我已经更改,所以您获得 2017 年和 2018 年。您不需要增加 @987654325 @顺便说一句。

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多