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

标签 r dataframe lapply

我有一个函数comp(char1, char2, stock) 。它扫描不同特征的股票数据的大型 Excel 文档,浏览 char1 中的指定工作表。和char2对于特定的stock (它们按行排列并建立索引,因此 stock = 1 将给出第一只股票),并返回一个新的数据框,其中包含特定股票 char1 的数据。在一列中和 char2在另一列中。

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

我是 R 的初学者,但我认为我需要做的是以某种方式重复该函数 100 次,每次股票的输入增加 1,然后以某种方式组合所有数据帧(我认为与 rbind),但我并不完全肯定。

这是一个例子:

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

所以如果我这样做rbind(AAPL, DIS)我得到一个长度为 8 的数据帧,它结合了 AAPL 和 DIS。然而,为每个人都这样做是非常乏味的,所以我想找到一种方法让它自动化。

最佳答案

这样的东西应该适合你

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

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

您可能希望将股票 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))

关于r - 如何重复返回数据帧的函数,然后将所有数据帧组合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651793/

相关文章:

r - 具有位置向量的向量子集列表

r - 确保函数不使用全局变量

r - 在 R 或 SQLite 中分别将多列中的字符串拆分为新行

r - 仅访问生存对象的一部分

python - 对于两个 DataFrame 中的多列的自定义条件,比嵌套 for 循环更快的方法

R 使用 lapply 制作函数 : bug or what?

r - Windows R 的 Kerberos 身份验证

python - 每个值都取决于另一个 df 查询的 Pandas 列

r - 将变量中的值设置为 NA,以另一个变量为条件

r - 拆分、应用线性模型、组合