我有一个看起来像这样的数据框
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]}
}
有什么建议吗?我正在努力将列表中的数字作为后缀传递给引用列名...
答案 0 :(得分:0)
使用grep
查找var
和s_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
上面的##行也可以这样写,这里不需要,但如果计算更复杂,则可能需要使用lapply
或mapply
。
data[s_var_cols] <- lapply(data[var_cols], `*`, multiplier)