我的数据框称为 Subs 。
我的变量是REV_4
,REV_5
,REV_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
识别为变量名称的一部分。
有没有办法解决这个问题?非常感谢。
答案 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"