根据给定列中的公共值,按列索引聚合R中的多行

时间:2018-08-16 04:42:08

标签: r dplyr grouping aggregate

这是一个非常相似的问题:

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中运行。)

谢谢您的帮助!

1 个答案:

答案 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帖子中的链接

相关问题