【发布时间】:2019-09-07 23:42:20
【问题描述】:
总结这个过程,我从 bbref 中提取数据,在数据框中对其进行结构化,将 3 个向量从字符转换为数字,并选取玩超过 20 场游戏的玩家子集。然而,当我重新排序数据并显示前 20 名时,只删除了一些非预选赛,并且仍然有很多观察不到 20 场比赛。
library(XML)
library(RCurl)
library(plyr)
urladv <- "https://www.basketball-reference.com/leagues/NBA_2019_advanced.html"
urladvdata <- getURL(urladv)
dataadv <- readHTMLTable(urladvdata, stringsAsFactors = FALSE, encoding = "UTF-8")
datadv <- structure(dataadv, row.names =c(NA, -734), .Names = seq_along(dataadv), class = "data.frame")
advstats <- ldply(dataadv, data.frame)
advstats[,c('PER', 'BPM')] <- sapply(advstats[,c('PER','BPM', 'G')], as.numeric)
advstats <- subset(advstats, G > 20)
advstats <- advstats[with(advstats,order(-PER)),]
advstats[1:20,]
advstats[1:20,] 的输出包括像 Trevon Duval、Gary Payton 和 Alan Williams 这样的球员,他们每个人都打了 5 场或以下比赛。我很困惑这些观察的特殊情况是什么,因为子集删除了 100 多个观察。
【问题讨论】:
-
仅供参考,如果您将代码与用于标记代码的 ``` 写在同一行,这会告诉降价解析器该文本是要使用的语言,而不是一行代码。在我添加新行之前,我们看不到您正在使用的网址
-
感谢@camille 的通知
-
我认为
subset没有为G>20做你想要的,因为G仍然是一个字符串而不是数字。对于sapply,您是否缺少G的分配?应该是advstats[,c('PER', 'BPM', 'G')] <- sapply(advstats[,c('PER','BPM', 'G')], as.numeric)? -
@Ben 你说得对,G 不见了。包含它可以修复子集行为。