2017-07-16 2 views
1

Ich scraping eine Tabelle für eine Liste von IDs.Neue Zeilen an den data.frame in einer Schleife anhängen

Dies ist meine Liste:

dput(temp_data) 
structure(list(tax_number = c("http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4020012521389", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4026009507659", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4013009503390", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4026010510230", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4080009506819", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4066010500147", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4026013516794", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4020012520196", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4020008505166", 
"http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4020010511645" 
)), .Names = "tax_number", row.names = c(NA, -10L), class = "data.frame") 

Die Bibliotheken und Schleife im mit:

library(rvest) 
library(xml2) 
library(tidyr) 


for (i in 1:nrow(temp_data)) { 

    temp_data_point <- temp_data[i, ] 
    file <- read_html(temp_data_point) 
    tables <- html_nodes(file, "table") 
    table1 <- html_table(tables[8], fill = TRUE) 
    table2 <- as.data.frame(table1) 
    table2 <- table2[15:24 , 1:2] 

    colnames(table2)[1] <- "variables" 
    colnames(table2)[2] <- "results" 

    temp_table <- spread(table2, variables, results) 
    temp[i, ] <- temp_table 
    return(temp) 
} 

Also im Grunde die Schleife wiederholt durch die Liste, um die Daten in dem temporären Objekt füllen, aber mein Der Code zeichnet nicht jede Iteration in einer separaten Zeile mit dem

temp[i, ] <- temp_table 

auf die letzte Iteration.

Irgendwelche Ideen, wo ich es falsch mache?

P.S.

Ich habe vergessen zu erwähnen. Das Objekt temp ist ein Objekt, das außerhalb der Schleife erstellt wurde.

str(temp) 
'data.frame': 1 obs. of 10 variables: 
$ Адреса  : chr "БУЛ.МАК.ПРОСВЕТИТЕЛИ 16" 
$ Дејност  : chr "Дејности на туристичките агенции" 
$ Депонент банка: chr "ОХРИДСКА БАНКА А.Д. - ОХРИД" 
$ ЕДБ   : chr "MK4020012521389" 
$ Жиро сметка : chr "000530000101546566" 
$ Матичен број : chr "6823769" 
$ Место   : chr "ОХРИД" 
$ Назив   : chr "Трговско друштво за производство градеЖништво трговија услуги и угостителство АНТОНИО&БОЈАН ДООЕЛ увоз-извоз Охрид" 
$ Правна форма : chr "Д.О.О.Е.Л. ДРУШТВО СО ОГРАНИЧЕНА ОДГОВОРНОСТ НА ЕДНО ЛИЦЕ" 
$ Телефон  : chr "075/414-585" 

Es hat im Grunde die gleichen Spaltennamen und eine Dummy-Zeile.

+1

wo haben Sie das Objekt 'Temp' erstellt? – Nate

+1

Beachten Sie, dass 'colnames (table2) [1] <-" Variablen "; colnames (table2) [2] <- "results" 'kann geschrieben werden' names (table2) <- c ("variables", "results") '. – lmo

+0

@NateDay Hallo. Ich habe gerade die Frage aktualisiert. Ich habe vergessen zu erwähnen, dass das temporäre Objekt außerhalb der Schleife erstellt wurde. – Prometheus

Antwort

1

Das Problem ist, dass Ihre Funktion sofort nach der Initialisierung der ersten Zeile der data.frame zurückkehrt. Nehmen Sie die return außerhalb der Schleife, zum Beispiel:

for (i in 1:nrow(temp_data)) { 
    ... 
    temp[i, ] <- temp_table 
} 

return(temp) 
+1

Ich hätte darüber nachdenken sollen. Danke für die Hilfe Erhan! – Prometheus

Verwandte Themen