【问题标题】:How to remove unwanted rows from dataframe?如何从数据框中删除不需要的行?
【发布时间】:2019-10-10 00:17:07
【问题描述】:

如果您查看棒球参考网站并单击球队和击球,您会看到他们可以选择将表格转换为 CSV,但是当 URL 不适用于 read.csv() 时,我该如何获取它们

我正在尝试使用来自棒球参考.com 的特定球队的rvest 包导入击球数据。我只想包括守场员并省略投手、重复的列名和网站从数据生成的团队总数。如果我可以只使用 CSV,我就不会遇到这个问题,但 html_table() 只会从网站上抓取原始表格,而删除带有值的列只会弄乱数据。

library(rvest)
#Goals
#Remove unwanted rows
#Remove pitcher batting stats

#San Fransisco Giants
giantsBatting <- read_html('https://www.baseball- 
reference.com/teams/SFG/2019-batting.shtml#team_batting::none')
giantsCSV <- giantsBatting%>%
  html_nodes('table')%>%
  html_table()
giantsDF<-as.data.frame(giantsCSV)
giantsDF<-giantsDF[!(giantsDF$Pos=='P'& giantsDF$Pos=='Pos'),]
print(giantsDF)

我希望输出具有一组列名(该表在第 9-10 行以及之后的投手有三组)并删除投手和球队总统计数据。

实际输出不会省略所有投手,也不会删除额外的列名标题。

【问题讨论】:

  • 您不能在同一行中同时包含“P”和“Pos”。你可能需要!giantsDF$Pos %in% c("P", "Pos")
  • &amp;改成|,giantsDF[!(giantsDF$Pos=='P' | giantsDF$Pos=='Pos'), ]就可以得到你想要的输出

标签: r web-scraping rvest


【解决方案1】:

问题是使用&amp; 在同一行上查找“P”和“Pos”的逻辑。它给出了所有 FALSE 的输出,通过否定 (!),这将转换为所有 TRUE,因此返回完整的数据集。

相反,对于 length 大于 1 的值向量,使用 %in% 然后取反 (!)

giantsDF1 <- giantsDF[!giantsDF$Pos %in% c("P", "Pos") ,] 
nrow(giantsDF1)
#[1] 36

nrow(giantsDF)   
#[1] 71

【讨论】:

  • 谢谢!这对表格有帮助,但您将如何获得 CSV 选项?网站上的 HTML 是“#csv_team_batting”,但当我使用 html_nodes('#csv_team_batting') %&gt;% html_text() 时无法读取 抱歉,如果这些问题是基本知识,我忘记了很多语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多