3 votes

rbind fichiers txt du répertoire en ligne (R)

J'essaie de concaténer des fichiers texte à partir d'une url mais je ne sais pas comment faire avec le html et les différents dossiers ?

C'est le code que j'ai essayé, mais il ne liste que les fichiers texte et contient beaucoup de code html, par exemple ce Comment puis-je résoudre ce problème afin de combiner les fichiers texte en un seul fichier 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
}
}

1voto

jmartindill Points 180

Voici un extrait de code qui a fonctionné pour moi. J'aime utiliser rvest plutôt que RCurl, simplement parce que c'est ce que j'ai appris. Dans ce cas, j'ai pu utiliser la fonction html_nodes pour isoler chaque fichier se terminant par .txt. Dans le tableau des résultats, les heures sont enregistrées sous forme de chaînes de caractères, mais vous pouvez corriger cela plus tard. Faites-moi savoir si vous avez des questions.

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)))
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X