这是一个非常相似的问题:
根据给定列中的常见值聚合 R 中同一 data.frame 的多行
在我的情况下,列的选择在不同的模拟样本中正在发生变化。我在每次模拟中都有选定的列索引。如何在索引而不是变量名称上使用函数aggregate
?也就是说,在回答这个问题时,我如何使用这样的代码:
c=c(1,2,3)
aggregate(value ~ df[,c], FUN = mean, data=df) # comparing to aggregate(value ~ item + size + weight, FUN = mean, data=df)
(请注意,上面的行不会在 R 中运行。
感谢您的任何帮助!
不使用公式方法,对列"value"和by
中的分组列进行子集化,并指定函数
aggregate(df["value"], df[,c], FUN = mean)
#. item size weight value
#1 B 1 2 3
#2 C 3 2 1
#3 A 2 3 5
使用公式方法,将分组列与我们要获取mean
的列一起子集化,并使用.
指定子集数据集中的所有列
aggregate(value ~ ., data= df[, c('value', names(df)[c])], mean)
# item size weight value
#1 B 1 2 3
#2 C 3 2 1
#3 A 2 3 5
--
如果我们想使用dplyr
,使用group_by_at
并指定其中的c
变量
library(dplyr)
df %>%
group_by_at(c) %>%
# or extract column names, convert to symbol, and evaluate (!!!)
#group_by(!!! rlang::syms(names(.)[c])) %>%
summarise(value = mean(value))
# A tibble: 3 x 4
# Groups: item, size [?]
# item size weight value
# <fct> <int> <int> <dbl>
#1 A 2 3 5
#2 B 1 2 3
#3 C 3 2 1
注意:输入数据集取自OP帖子中的链接