我如何用不同的变量查找多个数据框

问题描述 投票:0回答:1

我有一堆具有不同标头的数据框,但我想将它们附加到一个大型数据框中。如果记录没有任何值,则可以将这些列留为空白。

下面是代码示例。我想将CHK.bs,OXY.bs和FRCOY.bs结合在一起。但是,我的实际数据由100多个记录组成,每个记录都以.bs结尾,因此我将需要一种简单的方法来引用所有这些数据框。

library(rvest)
library(stringr)
library(magrittr)
library(httr)

Symbols<- c("FRCOY","OXY","CHK")


for (i in 1:length(Symbols)) {


  bs <- "https://finance.yahoo.com/quote/"
  bs <- paste0(bs,Symbols[i],"/balance-sheet?p=",Symbols[i])
  bs <- read_html(bs, user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0")

  bs.nodes <- bs%>%html_nodes(".fi-row")

  bs.df = NULL

  for(j in bs.nodes){
    r <- list(j %>%html_nodes("[title],[data-test='fin-col']")%>%html_text())
    bs.df <- rbind(bs.df,as.data.frame(matrix(r[[1]], ncol = length(r[[1]]), byrow = TRUE), stringsAsFactors = FALSE))
  }


  bs.matches <- str_match_all(bs %>% html_node('#Col1-3-Financials-Proxy')%>%html_text(),'\\d{1,2}/\\d{1,2}/\\d{4}')  

  bs.units <-str_extract(bs %>% html_node('#Col1-3-Financials-Proxy')%>%html_text(),'(?<=All numbers in\\s)\\w+\\s?s')

  bs.headers <- c('Breakdown',bs.matches[[1]][,1]) 

  Ticker <- Symbols[i]
  bs.df <- cbind(bs.df,Ticker)

  assign(paste0(Symbols[i],'_bs'),value = bs.df,envir = parent.frame())

}
r dataframe rvest rbind
1个回答
0
投票

根据上述OP的要求,以下是我的意思simple self-contained example

library(tidyverse)

bs <- list()

#Generate some example data
makeDataFrames <- function(symbol, n) {
  # Note the global assignment
  bs[[paste0(symbol, "-nodes")]] <<- tibble(Symbol=symbol, Type="Node", X=runif(n), Y=runif(n))
  bs[[paste0(symbol, "-df")]] <<- tibble(Symbol=symbol, Type="DF", X=runif(n), Z=runif(n))
}

makeDataFrames("FRCOY", 5)
makeDataFrames("OXY", 10)
makeDataFrames("CHK", 7)
# print(bs)

# Demonstrate the solution
allData <- bind_rows(bs)
allData

提供

# A tibble: 44 x 5
   Symbol Type       X      Y      Z
   <chr>  <chr>  <dbl>  <dbl>  <dbl>
 1 FRCOY  Node  0.351   0.718 NA    
 2 FRCOY  Node  0.868   0.820 NA    
 3 FRCOY  Node  0.0338  0.897 NA    
 4 FRCOY  Node  0.952   0.621 NA    
 5 FRCOY  Node  0.630   0.538 NA    
 6 FRCOY  DF    0.511  NA      0.209
 7 FRCOY  DF    0.178  NA      0.768
 8 FRCOY  DF    0.607  NA      0.514
 9 FRCOY  DF    0.894  NA      0.270
10 FRCOY  DF    0.184  NA      0.926
# … with 34 more rows
© www.soinside.com 2019 - 2024. All rights reserved.