如何重复返回数据框的函数,然后将所有数据框组合在一起?

时间:2015-06-04 18:48:25

标签: r dataframe lapply

我有一个函数comp(char1, char2, stock)。它会扫描一个包含不同特征的库存数据的大型Excel文档,在char1char2中查找特定stock的指定工作表(这些工作在行中并被编入索引,因此{{1将给出第一个股票),并返回一个新数据框,其中包含一列中特定股票stock = 1的数据和另一列中的char1

我希望能够为100个股票执行此操作,并将所有数据框合并为一个包含两列的大型数据框:char1和char2。如果给出股票名称并不重要,我只想在两个列的一个大数据框中为所有100只股票的char1和char2中的所有数据。

我是R的初学者,但我认为我需要做的是以某种方式重复该功能100次,每次输入的股票增加1,然后以某种方式组合所有的数据帧(I和rbind一起思考,但我并不完全正面。

以下是一个例子:

char2将生成数据框

AAPL <- comp(char1 = 'RETURNS', char2 = 'EPS' , stock = 1)

RETURNS EPS 1 17.91 -31.3504 2 17.10 -33.1423 3 22.80 -33.1423 4 22.60 -38.0202

将生成数据框

DIS <- comp(char1 = 'RETURNS', char2 = 'EPS' , stock = 2)

所以,如果我 RETURNS EPS 1 63.01 17.4997 2 65.32 54.2022 3 58.26 20.6345 4 66.53 20.6345 ,我会得到一个长度为8的数据帧,它结合了AAPL和DIS。但是,为每个人执行此操作非常繁琐,所以我想找到一种让它自动化的方法。

1 个答案:

答案 0 :(得分:3)

这样的事情对你有用

> stocks <- 1:100
> results <- lapply(stocks, 
                    function(s) comp(char1 = 'RETURNS', 
                                     char2 = 'EPS' , 
                                     stock = s)
                   )
> df <- do.call(rbind, results)

lapply调用会生成所有单独的数据框,然后do.call将它们绑定到一个大的数据框中。

您可能希望将库存ID添加为lambda函数中的附加列,以便以后处理。你可以很容易地做到这一点,但为了清楚起见,我们将把lambda移到命名函数

> stocks <- 1:100
> one_stock <- function(s) {
      d <- comp(char1 = 'RETURNS', char2 = 'EPS', stock = s)
      d$stock <- s
      d
  }
> df <- do.call(rbind, lapply(stocks, one_stock))