2017-07-16 4 views
1

私はIDのリストのためにテーブルを掻いています。ループ内のdata.frameに新しい行を追加する

これが私のリストです:

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

ライブラリとループイム使用して:

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

をだから、基本的には、ループの反復処理し、リストを、一時オブジェクトにデータを埋めるが、私のコードは、各繰り返しを別々の行に記録しません。

temp[i, ] <- temp_table 

最後の反復。

私が間違っているのは何ですか?

P.S.

私は言及するのを忘れました。オブジェクトtempは、ループの外部で作成されたオブジェクトです。

​​

基本的に同じ列名と1つのダミー行があります。

+1

「temp」オブジェクトはどこに作成されましたか?returnはループ外にありますか? – Nate

+1

'colnames(table2)[1] < - " variables ";注意してください。 colnames(table2)[2] < - "results" 'は' names(table2)< - c( "variables"、 "results") 'と書くことができます。 – lmo

+0

@NateDay hi。私はちょうど質問を更新しました。私は、一時オブジェクトがループの外側で作成されたことに言及することを忘れていました。 – Prometheus

答えて

1

data.frameの最初の行を初期化した後に関数が即座に返すという問題があります。

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

return(temp) 
+1

私はそれについて考えていたはずです。 Erhanのおかげでありがとう! – Prometheus

関連する問題