如果这个问题对你们中的某些人来说微不足道,请原谅我,但是我是R的完全新手。
我想使用R包“ erer”中的函数“ evReturn()”。它是一种计算累积异常收益的函数,对于一个公司和一个市场指数,它看起来像这样:
hh <- evReturn(y = dataset, firm = "Firm1",
y.date = "date", index = "Index1", est.win = 250,
digits = 3, event.date = 19990505, event.win = 5)
如果我有一个包含3列的矩阵(日期,公司1的股票收益率和索引1的指数收益率),这将很好地工作。
现在,情况有点复杂了。我有appr。3000家公司和3000种不同的指数。因此,在第一列中,我有日期。在2-3001栏中,我具有所有公司的股票收益率。在3002-6001栏中,我得到了索引的返回值。
我以为我可以使用这样的for循环为所有公司和所有索引运行evReturn()函数
> for(i in 2:3001)
{hh <- evReturn(y=numt,firm=i,event.date=20140102,y.date="Date",
index=i+3000,event.win=2,est.win=230,digits=3)}
但它只会返回
Error in [.data.frame`(y, (loca - event.win - est.win):
(loca - event.win - : undefined columns selected
我知道有几篇文章解决了“选择的未定义列”的错误,但在此无济于事。有谁知道如何创建一个for循环以让evReturn()在我所有的列中运行?
任何帮助表示赞赏!
保罗,干杯
问题是,firm
还有index
必须是你的数据帧的相应的列名,而不是列索引。您可以访问数据帧的第i列名numt
用names(numt)[i]
。所以你的for循环应该看起来像
for(i in 2:3001) {
hh <- evReturn(y=numt,firm=names(numt)[i],event.date=20140102,y.date="Date",
index=names(numt)[i+3000],event.win=2,est.win=230,digits=3)
}
我想提一下,此循环在每个迭代步骤都会覆盖hh。但是,由于这可能是有意的,并且您在循环内进行了一些额外的计算,因此我将保留这种方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句