我有以下数据框:
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/