我要做的是使用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,........
答案 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