【问题标题】:Loop to go through columns and for each set of 4 columns generate new variable in R循环遍历列,并为每组 4 列在 R 中生成新变量
【发布时间】:2013-10-01 17:07:00
【问题描述】:

我在 R 中有一个数据集,其结构如下

Headers:
ClientID Geo Industry RevBiz1_09 RevBiz1_10 RevBiz1_11 RevBiz1_12 RevBiz2_09 RevBiz2_10 RevBiz2_11 RevBiz2_12...

我想要做的是在 R 中编写一个从第 4 列开始并遍历每组 4 列的函数,计算 CAGR 并为相应的 Biz 生成一个具有该值的新列。我遇到的麻烦是弄清楚如何编写循环。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否将 CAGR 计算为 [(RevBiz1_12/RevBiz1_09) ^ (1/4)] - 1?
  • 请帮助我们为您提供可重现的示例(即代码和示例数据),详情请参阅stackoverflow.com/questions/5963269/…
  • 不太关心如何计算 cagr,更关心如何编写循环以在列中移动。例如,我需要使用什么循环设置然后将函数放入。
  • 除非您提供一个您尝试过的示例(理想情况下是可重现的),否则您不可能获得太多帮助,以便我们可以在具体方面为您提供帮助而不仅仅是为你写代码。

标签: r function loops


【解决方案1】:

我还没有运行它,但这应该让你知道该怎么做。但是,我仍然建议您发布一个示例,以便稍后可能从您的问题中受益的其他人。

编辑 - 假设以“_12”结尾的列仅适用于需要计算 CAGR 的数量。

   library(data.table)
   # Getting the list of column names for which CAGR needs to be calculated
   Instances = gsub(
      colnames(dataset)[
         grepl(colnames(dataset), pattern = "_12")
         ], 
      pattern = "_12", 
      replacement = ""
   )

   for ( i in Instances )
   {
      #calculating CAGR for each i
      #dataset is a data.table and not a data.frame
      dataset[, 
         paste0("CAGR",i):= (get(paste0(i,"_12")) / get(paste0(i,"_09")) ^ 1/4) - 1
      ]

   }

【讨论】:

  • 感谢您的帮助,有没有一种好方法可以在不实际引用列名的情况下做到这一点。基本上在前 4 列上循环运行计算,生成新变量,在接下来的 4 列上运行计算生成新变量。我的问题是 RevBiz 实际上发生了变化......但是它们都以 9 10 11 12 结束
  • 已编辑。现在实例不会循环 1 到 n 而是循环每组 4 下的基础名称。
  • 我收到以下错误有什么想法吗?错误:意外 ']' in: " #dataset 是一个 data.table 而不是一个 data.frame mdb[,paste0("CAGR",i):= ((get(paste0(i,".12")) / get(paste0(i,".09")) ^ 1/4) - 1]" > } 错误:“}”中的意外'}'
  • 这很有帮助。虽然我很好奇你为什么使用数据表而不是数据框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多