用于对具有相似名称的变量执行类似计算的函数

时间:2018-02-08 12:39:14

标签: r dataframe apply

我有一个看起来像这样的数据框

var1<-c(150,20,30)
var2<-c(20,30,40)
x<-c(2.5,4.5,7.5)
s_var1<-c(0,0,0)
s_var2<-c(0,0,0)

data<-data.frame(var1, var2, x, s_var1, s_var2)

可能会有一大堆&#39; var&#39;列 - var1,var2 .... var&#39; n&#39;。与s_var1,s_var2 ......等相同。

我想编写一个函数来计算&#39; s_var&#39;列引用&#39; var&#39;列和&#39; x&#39;柱。

例如:如果有2&#39; var&#39;列

n_var<-c(1,2)

for (i in n_var)
{
if (x > 2.5) { s_var[i] = var[i] } else {s_var[i] = 2*var[i]}
}

有什么建议吗?我正在努力将列表中的数字作为后缀传递给引用列名...

1 个答案:

答案 0 :(得分:0)

使用grep查找vars_var列的列索引,并定义multiplier,这取决于x。最后应用乘数。请注意,乘数将被回收以乘以data[var_cols]中的每个列。

fun <- function(data) {
  var_cols <- grep("^var", names(data))
  s_var_cols <- grep("^s_var", names(data))
  multiplier <- (x > 2.5) + 1
  data[s_var_cols] <- multiplier * data[var_cols]  ##
  data
}

fun(data)

,并提供:

  var1 var2   x s_var1 s_var2
1  150   20 2.5    150     20
2   20   30 4.5     40     60
3   30   40 7.5     60     80

上面的##行也可以这样写,这里不需要,但如果计算更复杂,则可能需要使用lapplymapply

data[s_var_cols] <- lapply(data[var_cols], `*`, multiplier)