【问题标题】:Using a double cycle使用双循环
【发布时间】:2020-07-20 22:38:04
【问题描述】:

我有一个数据框 pif,其中包含有关某些投资基金的信息和一个列表 names,其中包含所述基金的名称(或简称为 pif >的变量名):

names
 [1] mercury_stock  vtb_bric ...

等等。

现在我需要计算一些基本信息。我想要的输出是包含每个基金收益的数据框,然后我使用cbind 将它们绑定在一起。

对于这个操作我已经有了循环功能:

i=c(1:1584)
pif<-cbind(i, pif)
for ( i in 2:1584)
{
d_mercury_stock[i] = (pif$mercury_stock[i] - pif$mercury_stock[i-1])/pif$mercury_stock[i-1]
d_vtb_bric[i] = (pif$vtb_bric[i] - pif$vtb_bric[i-1])/pif$vtb_bric[i-1]
...
}

yield<-cbind(d_mercury_stock, d_vtb_bric, ...)

它工作得很好,但是我需要手动执行这个函数来获得每个基金的结果——而且数据框有超过 30 个,这意味着我应该复制和粘贴相同的函数三十次。

最好的解决方案是运行我的函数的第二个循环,使用列表 names 的元素并以某种方式将每个变量插入其中。

不幸的是,我无法做到这一点,因为我对循环和重复功能比较陌生。我怀疑lapply/sapply 或自定义函数可能是这里的解决方案。 你有什么建议?

【问题讨论】:

  • 您可以添加一个模拟 data.frame 以使代码可重现且更易于理解。

标签: r function lapply cycle


【解决方案1】:

显然答案很简单。在这里发布它以防其他用户偶然发现同样的问题。

for (j in 1:ncol(pif))
  for ( i in 2:1584)
  {
   yield[i,j] = (pif[i,j] - pif[i-1,j])/pif[i-1,j]
  }

输出是一个已经编译的矩阵,它只缺少正确的变量名。

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 2016-07-14
    • 1970-01-01
    • 2019-05-10
    • 2014-09-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多