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)
如何聚合并在第一次尝试时获得正确的列名称?(也许没有办法做到这一点)
你可以尝试
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)