使用带有变量名的聚合作为列名

Mic*_*hal 3 aggregate r dataframe

我有以下数据框:

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
Run Code Online (Sandbox Code Playgroud)

我想按以下方式聚合数据框 c:

aggregate(b~a,FUN=mean,data=c)
#  a   b
#1 1 0.5
#2 4 2.0
Run Code Online (Sandbox Code Playgroud)

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

所以:

d <- 'a'
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用包含列名称的变量 d 进行聚合,显然会收到错误:

aggregate(b~d,FUN=mean,data=c)
#Error in model.frame.default(formula = b ~ d, data = c) : variable lengths differ (found for 'd')
Run Code Online (Sandbox Code Playgroud)

这可行,但我随后得到了愚蠢的列名称。我想避免重命名列的额外步骤:

aggregate(c[,'b']~c[,d],FUN=mean,data=c)
#  c[, d] c[, "b"]
#1    1      0.5
#2    4      2.0
Run Code Online (Sandbox Code Playgroud)

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

akr*_*run 5

你可以尝试

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

如果您使用该formula方法,另一种选择是使用setNames

 setNames(aggregate(b~get(d), FUN=mean, data=c), colnames(c))
 #  a   b
 #1 1 0.5
 #2 4 2.0
Run Code Online (Sandbox Code Playgroud)