我有一个函数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/