使用r中的for循环使用值填充新的数据帧列

时间:2014-04-26 23:24:49

标签: r for-loop dataframe

我正在使用RStudio编写一个脚本,该脚本只是根据涉及同一data.frame中另一列的简单公式填充data.frame中的新列。我最终想要添加一个内部循环,这就是为什么我认为for循环是要走的路。我是新手,所以我不确定。 在开发用户定义函数的某个时刻,BD,PS和LT(见下文)将是用户定义函数中的参数。我创建了一个非常简单的data.frame用于说明。 问题是:如何通过循环中的简单指数衰减公式得到这个循环或一些公式来填充media_stock的值?

TV = data.frame(cbind(cable = c(215, 144, 66, 400, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 77, 99, 108, 86, 118, 204, 119, 144, 0, 0, 0, 450, 361, 438, 170, 244, 0, 0, 0, 0, 0, 107, 122, 207, 274, 0, 0, 0, 0, 0, 0, 0, 752, 700,665),media_stock = NA))

PS = 0.30 
BD = 0 
LT = 6 

for(i in (LT+1):length(TV)){ 
  TV$media_stock[i-BD] <- TV$cable[i-BD] + PS*TV$media_stock[i-BD-1]
}

感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

您当前的代码中有两个小错误可能会解决您的问题。首先,您使用length(TV)来获取数据框中的行数。您想要使用的是nrow(TV)。第二,media_stock列中的所有值均为NA。当您应用公式时,无论您对算术做什么,结果仍然是NA,因此您需要初始化计划在迭代中使用的media_stock的第一个值。例如:

TV$media_stock[LT-BD] <- 1
for(i in (LT+1):nrow(TV)){ 
  TV$media_stock[i-BD] <- TV$cable[i-BD] + PS*TV$media_stock[i-BD-1]
}