这是一个非常相似的问题:
Aggregate multiple rows of the same data.frame in R based on common values in given columns
在我的情况下,不同模拟样本中列的选择正在变化。我在每个模拟中都有选定的列索引。如何在索引上使用函数aggregate
而不是变量名?即,在该question的答案中,我如何使用这样的代码:
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中运行。)
谢谢您的帮助!
答案 0 :(得分:4)
在不使用公式方法的情况下,将{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帖子中的链接