2016-10-03 47 views
3

我想從url中獲取連接文本文件,但我不知道如何做到這一點與HTML和不同的文件夾?從在線目錄(R)的rbind txt文件

這是我試過的代碼,但它只列出了文本文件並且有很多html代碼,如this我該如何解決這個問題,以便我可以將文本文件合併到一個csv文件中?

library(RCurl) 
url <- "http://weather.ggy.uga.edu/data/daily/" 
dir <- getURL(url, dirlistonly = T) 
filenames <- unlist(strsplit(dir,"\n")) #split into filenames 
#append the files one after another 
for (i in 1:length(filenames)) { 
file <- past(url,filenames[i],delim='') #concatenate for urly 
if (i==1){ 
cp <- read_delim(file, header=F, delim=',') 
} 
else{ 
temp <- read_delim(file,header=F,delim=',') 
cp <- rbind(cp,temp) #append to existing file 
rm(temp)# remove the temporary file 
} 
} 

回答

1

這裏是我爲我工作的代碼片段。我喜歡在RCurl上使用rvest,因爲這是我學到的東西。在這種情況下,我能夠使用html_nodes函數來隔離每個以.txt結尾的文件。結果表格將時間保存爲字符串,但稍後可以修復。如果您有任何問題,請告訴我。

library(rvest) 
library(readr) 

url <- "http://weather.ggy.uga.edu/data/daily/" 

doc <- xml2::read_html(url) 
text <- rvest::html_text(rvest::html_nodes(doc, "tr td a:contains('.txt')")) 


# define column types of fwf data ("c" = character, "n" = number) 
ctypes <- paste0("c", paste0(rep("n",11), collapse = "")) 
data <- data.frame() 

for (i in 1:2){ 
    file <- paste0(url, text[1]) 

    date <- as.Date(read_lines(file, n_max = 1), "%m/%d/%y") 

    # Read file to determine widths 
    columns <- fwf_empty(file, skip = 3) 

    # Manually expand `solar` column to be 3 spaces wider 
    columns$begin[8] <- columns$begin[8] - 3 

    data <- rbind(data, cbind(date,read_fwf(file, columns, 
              skip = 3, col_types = ctypes))) 
} 
+0

非常感謝您的幫助! – Dean

+0

嗨,由於某些原因第9列(太陽能)沒有正確的值。它只有最後一位數字。這是它受影響的唯一一列。有沒有辦法來解決這個問題? – Dean

+0

這似乎是'fwf_empty',一個決定列結束和開始的函數的問題。我已經創建了一個不太理想的手動修復程序,但應該爲您工作。 – jmartindill