使用循环创建新变量

时间:2016-02-28 06:47:04

标签: r loops

我的数据框称为 Subs

我的变量是REV_4REV_5REV_6

我想创建新变量来计算收入的百分比变化。
例如:d.rev.5 <- Subs$REV_5/Subs/$REV_4 -1

我想使用循环来创建这些新变量。我试过这个:

for(i in 5:10){
Subs$d.data.[i] <- Subs$REV_[i]/Subs$REV_[i-1] - 1 }

不起作用。 我怀疑它没有将i识别为变量名称的一部分。

有没有办法解决这个问题?非常感谢。

1 个答案:

答案 0 :(得分:2)

您无法像尝试(Subs$REV_[i])那样引用列,您需要创建一个字符串来表示该列。

我认为你想要做的是(在我创建的数据中没有你的数据)

set.seed(123)
Subs <- data.frame(rev_1 = rnorm(10, 0, 1),
                   rev_2 = rnorm(10, 0, 1),
                   rev_3 = rnorm(10, 0, 1),
                   rev_4 = rnorm(10, 0, 1))

for(i in 2:4){
  ## looping over columns 2-4
  col1 <- paste0("rev_", i)
  col2 <- paste0("rev_", i - 1)

  col_new <- paste0("d.rev.", i)

  Subs[, col_new] <- Subs[, col1] / Subs[, col2]

}
## A note on subsetting a data.frame
Subs$rev_1   ## works
i <- 1
Subs$rev_[i] ## doesn't work
Subs[, rev_[i]] ## doesn't work
Subs[, "rev_1"] ## works
Subs[, paste0("rev_", i)] ## works
## because
paste0("rev_", i)  ## creates the string:
[1] "rev_1"