写作时:df.stats <- aggregate(var1 ~ var2, data=df, FUN=mean)
df.stats保留列名(var1和var2)
写作时:df.stats <- aggregate(df[,1] ~ df[,2], data=df, FUN=mean)
df.stats列被称为df [,1]和df [,2] - 并且原始列名称将丢失。
如何使用索引并保留原始列名? 为什么我要使用索引?因为,每次我分析数据集中的新列/因子时,我都不想更改我的代码。
答案 0 :(得分:3)
如果你真的想要使用索引和forumla界面:
index_agg <- function(formula, data, FUN, ...) {
require(formula.tools)
left <- as.numeric(lhs(formula))
right <- as.numeric(rhs(formula))
f <- paste0(colnames(data[,c(left, right)]), collapse=" ~ ")
aggregate(as.formula(f), data=data, FUN=FUN, ...)
}
head(index_agg(6 ~ 1, data=mtcars, FUN=mean))
## mpg wt
## 1 10.4 5.3370
## 2 13.3 3.8400
## 3 14.3 3.5700
## 4 14.7 5.3450
## 5 15.0 3.5700
## 6 15.2 3.6075
head(index_agg(5 ~ 1, data=mtcars, FUN=mean))
## mpg drat
## 1 10.4 2.965
## 2 13.3 3.730
## 3 14.3 3.210
## 4 14.7 3.230
## 5 15.0 3.540
## 6 15.2 3.110
如果您不希望formula.tools
作为依赖项:
index_agg <- function(formula, data, FUN, ...) {
left <- as.numeric(toString(formula[3]))
right <- as.numeric(toString(formula[2]))
f <- paste0(colnames(data[,c(left, right)]), collapse=" ~ ")
aggregate(as.formula(f), data=data, FUN=FUN, ...)
}
答案 1 :(得分:0)
尝试使用setNames()
。显示iris
数据集
setNames(aggregate(iris[,1] ~ iris[,2], data = iris, mean), colnames(iris)[1:2])