2015-12-17 61 views
0

我正在嘗試創建一個函數,用於擦除從我傳遞的每個html源代碼中的player name。問題是,刮開始創建兩個錯誤的行,所以我想slice數據框排除前兩行。但是,行數是可變的,所以我不能硬編碼最後一行。在Rvest中使用Slice()函數

#### Libraries ------------------- 
library(rvest) 
library(XML) 
library(dplyr) 

# Set source as example 
site <- "http://www.pgatour.com/stats/stat.138.html" 

get_player_name <- function(site){ 
    player <- html(paste(site)) %>% 
    html_nodes(".player-name") %>% 
    html_text(trim=TRUE) %>% 
    as.data.frame() %>% 
    slice(3:max(nrow(.)))   # Drop the first two rows 
    #slice(3:73)      # This works for one site but not all = 73 
    names(player)[1] <- "PLAYER NAME" # Rename the column 
    player$ID <- seq.int(nrow(player)) # Create index variable 
    return(player) 
} 

當我運行:

a <- get_player_name(site) 

的我得到以下錯誤:

Error: result would be too long a vector 
In addition: Warning message: 
In slice_impl(.data, dots) : 
    no non-missing arguments to max; returning -Inf 
+1

_「(B)您不得使用或允許或幫助他人使用自動電子流程,機器人,蜘蛛,刮板,網絡爬蟲或其他監控,複製或下載數據或其他內容的計算機程序使用PGATOUR.com或通過PGATOUR.com訪問,包括但不限於實時評分,視頻,音頻,統計,輪詢或數據內容,無論是當前還是檔案。「http://www.pgatour.com/company/tos.html因爲你可以不意味着你應該) – hrbrmstr

+0

感謝這個信息 - 立即停止任何刮擦。應該看過。 – Jebediah15

回答

1

您可以使用-告訴slice()行你想:

slice(-c(1,2))