我有以下数据框:

a <- c(1,1,4)
b <- c(1,0,2)
c <- data.frame(a=a,b=b)
str(c)
#  a  b
#1 1  1
#2 1  0
#3 4  2

我想通过以下方式聚合数据框 c:
aggregate(b~a,FUN=mean,data=c)
#  a   b
#1 1 0.5
#2 4 2.0

但是,我的主要问题是我将使用一个变量作为列名

所以:
d <- 'a'

如果我尝试使用这个包含列名的变量 d 进行聚合,我显然会得到一个错误:
aggregate(b~d,FUN=mean,data=c)
#Error in model.frame.default(formula = b ~ d, data = c) : variable lengths differ (found for 'd')

这有效,但我得到了愚蠢的列名。我想避免重命名列的额外步骤:
aggregate(c[,'b']~c[,d],FUN=mean,data=c)
#  c[, d] c[, "b"]
#1    1      0.5
#2    4      2.0

如何在第一次尝试时聚合并获得正确的列名?
(也许没有办法做到这一点)

最佳答案

你可以试试

aggregate(c['b'], c[d], FUN=mean)
#   a   b
# 1 1 0.5
# 2 4 2.0

如果您使用 formula 方法,另一个选择是使用 setNames
 setNames(aggregate(b~get(d), FUN=mean, data=c), colnames(c))
 #  a   b
 #1 1 0.5
 #2 4 2.0

关于r - 对列名使用带有变量名的聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27235088/

10-16 13:40