我有一个函数comp(char1, char2, stock)
。它会扫描一个包含不同特征的库存数据的大型Excel文档,在char1
和char2
中查找特定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。但是,为每个人执行此操作非常繁琐,所以我想找到一种让它自动化的方法。
答案 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))