如何使用for循环在R函数ave中添加动态变量名称?

时间:2019-07-14 23:29:46

标签: r

我要做的是使用ave函数创建新变量(代码中为“ new_var”)

https://www.rdocumentation.org/packages/stats/versions/3.6.0/topics/ave

根据上述文档,每次更改分组变量(在我的代码中为“ new_year”)

我尝试用colnames(dat)[colnames(dat)== new_year]和dat [new_year]替换变量new_year,但是代码不起作用

for (year in 1990:2015){

new_var <- paste("active_year_calc", year , sep="_")
new_year <- paste("active_year", year , sep="_")

dat <- within(dat, {
  new_var<-ave(sum_variable, company_name,new_year, FUN = length
})

}

我希望在数据集中使用以下名称创建新列:

active_year_calc_1990,active_year_calc_1991,active_year_calc_1992,...... active_year_calc_2015

根据ave函数的输出,其中new年份按照new_year_1990,new_year_1991,new_year_1992,........

1 个答案:

答案 0 :(得分:0)

在这里,我们将字符串传递到ave中并分配一个字符串。代替within,我们可以使用with,然后使用lhs

将列的数据集分配给[[
for (year in 1990:2015){

  new_var <- paste("active_year_calc", year , sep="_")
  new_year <- paste("active_year", year , sep="_")

  dat[[new_var]] <- with(dat, ave(sum_variable, company_name, 
            get(new_year), FUN = length))


 }

可复制的示例

new_var1 <- "gear_Length"
new_gear <- "gear"
mtcars[[new_var1]] <- with(mtcars, ave(drat,  get(new_gear), FUN = length))
head(mtcars, 2)
#              mpg cyl disp  hp drat    wt  qsec vs am gear carb gear_Length
#Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4          12
#Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4          12