2017-04-20 139 views
0

我想在網站上進行多次搜尋,並具有設計功能不同的值,以插件並將結果轉換成數據幀功能通過值

低於

很難循環是一組命令我想出了,但它不僅有利於個人的搜索

fn = 'HARVEY' 

ln = 'ADELSON' 

mydf = data.frame(fn,ln); 




    root = 'https://npiregistry.cms.hhs.gov/' 


    u = paste(root,'registry/search-results-table?','first_name=', mydf$fn, '&last_name=', 
      mydf$ln, sep = ""); 

      # encode url correctly 

      zero <- httr::GET(u); 
    tables <- rvest::html_table(content(zero)); 


tab<-as.data.frame(tables) 

有沒有在爲r的功能,將插件不同的值,第一個和最後一個名稱,然後運行命令集,最後儲存在所有的結果單個數據幀。

感謝

回答

1

一般地,你可以使用Mapmapply以應用功能相對應的data.frame的列的元素。結果作爲data.frames列表返回。然後,您可以排將它們綁定(使用plyr::rbind.filldata.table::rbindlist)以創建單個data.frame

library(httr) 
library(rvest) 

fn <- c('HARVEY', "Dollar") 
ln <- c('ADELSON', "Vora") 
mydf <- data.frame(FirstName=fn, LastName=ln); 
root <- 'https://npiregistry.cms.hhs.gov/' 

#you can use data.table::rbindlist or plyr::rbind.fill to row bind a list of data.frames 
as.data.frame(data.table::rbindlist(Map(function(fn, ln) { 
    u <- paste0(root,'registry/search-results-table?', 
     'first_name=', fn, '&last_name=', ln) 
    zero <- GET(u) 
    tables <- html_table(content(zero)) 

    as.data.frame(tables) 
}, mydf$FirstName, mydf$LastName), fill=TRUE))