在循环中向data.frame添加新行

时间:2017-07-16 18:55:14

标签: r loops

我正在抓一张桌子以获取ID列表。

这是我的清单:

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是在循环外部创建的对象。

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"

它基本上具有相同的列名和一个虚拟行。

1 个答案:

答案 0 :(得分:1)

问题是你的函数在初始化data.frame的第一行后立即返回。取出循环外的return,例如:

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

return(temp)