在 R 中循环变量名

Kat*_*ney 3 loops r

我最近转向 R,正在努力寻找与以下内容等效的 R:循环使用公共前缀加数字(var1、var2、...、varn)命名的变量。

假设我有一个数据集,其中每一行都是一个商店,每一列都是该商店在第 1 个月、第 2 个月...第 6 个月的收入值。一些虚构的数据,例如:

store = c("a", "b", "c", "d", "c")
rev1 = c(500, 200, 600, 400, 1200) 
rev2 = c(260, 100, 450, 45, 1300)
rev3 = c(500, 150, 610, 350, 900)
rev4 = c(480, 200, 600, 750, 1000)
rev5 = c(500, 68, 750, 350, 1200)
rev6 = c(510, 80, 1000, 400, 1450)
df = data.frame(store, rev1, rev2, rev3, rev4, rev5, rev6) 
Run Code Online (Sandbox Code Playgroud)

我正在尝试做类似以下的事情:

varlist <- paste("rev", 1:6)  #create list of variables rev1-rev6 #
for i in varlist {
      highrev[i] <- ifelse(rev[i] > 500, 1, 0) 
}
Run Code Online (Sandbox Code Playgroud)

因此,对于每个现有变量 rev1:rev6,创建一个变量 highrev1:highrev6,如果 rev1:rev6 > 500,则该变量等于 1,否则等于 0。

您能建议一种适当的方法来做到这一点吗?

Dav*_*urg 5

在 R 中,我们通常不使用循环来进行此类操作。你可以简单地这样做:

df[paste0("highrev", 1:6)] <- (df[paste0("rev", 1:6)] > 500) + 0
df
#   store rev1 rev2 rev3 rev4 rev5 rev6 highrev1 highrev2 highrev3 highrev4 highrev5 highrev6
# 1     a  500  260  500  480  500  510        0        0        0        0        0        1
# 2     b  200  100  150  200   68   80        0        0        0        0        0        0
# 3     c  600  450  610  600  750 1000        1        0        1        1        1        1
# 4     d  400   45  350  750  350  400        0        0        0        1        0        0
# 5     c 1200 1300  900 1000 1200 1450        1        1        1        1        1        1
Run Code Online (Sandbox Code Playgroud)