【问题标题】:Using loop to create new variables使用循环创建新变量
【发布时间】:2016-02-28 06:47:03
【问题描述】:

我的数据框名为 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 识别为变量名的一部分。

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

【问题讨论】:

  • 你为什么想要使用循环? Subs$d.rev.5 &lt;- Subs$REV_5 / (Subs$REV_4 - 1) 应该这样做。
  • 哦,我想我没有正确解释自己。我有大约 40 个不同的收入变量,即 REV_4、REV_5.......REV_39、REV_40 等,我希望找到一种更快的方法来创建一个新变量来计算它们的百分比变化。
  • 您应该使用dput(head(Subs)) 的输出更新您的问题,以便其他人可以看到您正在使用的数据的结构,从而可以为您提供解决方案

标签: r loops


【解决方案1】:

您不能像您尝试的那样引用列 (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"

【讨论】:

  • 为什么要使用 Subs[, paste0("rev_", 2)] ?你不能使用 Subs[, 2] 或 Subs[,i]
  • 这正是我所需要的。非常感谢!
  • @Learner 你是对的,你可以,我只是假设他们想按名称引用列
猜你喜欢
  • 2018-06-17
  • 2012-01-21
  • 2018-03-17
  • 2020-03-15
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2014-11-11
相关资源
最近更新 更多