Добавить результаты вызова функции для вектора друг к другу в r - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть 1 столбец данных с серией URL в единственном столбце (может быть вектором точно так же).В этом примере мы сохраним каждый URL-адрес одинаковым:

urls<-as.data.frame(c("https://en.wikipedia.org/wiki/List_of_counties_in_California", "https://en.wikipedia.org/wiki/List_of_counties_in_California","https://en.wikipedia.org/wiki/List_of_counties_in_California"))
colnames(urls)<-"col1"
urls$col1<-as.character(urls$col1)

У меня также есть написанная функция, которая очищает таблицу от этих URL-адресов:

wiki_scrape <- function(x){
  x_url <- x %>%
    read_html() %>%
    html_nodes(xpath='//*[@id="mw-content-text"]/div/table[2]') %>%
    html_table() %>%
    .[[1]] %>%
    select(County)
  return(x_url) 
}

Результат wiki_scrape(urls[1,1]) представляет собой фрейм данных 58 наблюдений.Я хотел бы запустить эту функцию wiki_scrape итерационным образом по всему вектору urls (а не только urls[1,1]) и добавить каждый результирующий кадр данных к предыдущему результирующему кадру данных.В этом примере в urls указаны 3 URL-адреса, поэтому я хочу, чтобы мой результирующий фрейм данных имел длину 174 наблюдения (3 * 58 = 174, где 58 - длина одного фрейма данных, обработанного с использованием wiki_scrape).

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Мы можем использовать map_df от purrr

library(purrr)
out <- map_df(urls$col1, wiki_scrape)
head(out)
#            County
#1   Alameda County
#2    Alpine County
#3    Amador County
#4     Butte County
#5 Calaveras County
#6    Colusa County
0 голосов
/ 06 февраля 2019

Вы могли бы сделать

library(dplyr)

map(urls$col1, wiki_scrape) %>% bind_rows() 

#            County
#1   Alameda County
#2    Alpine County
#3    Amador County
#4     Butte County
#5 Calaveras County
#6    Colusa County
#....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...