根据名称前缀汇总数据框行

时间:2017-02-24 21:43:00

标签: r dplyr

我想创建一个摘要数据框,根据文本前缀收集所有行,每个变量的平均值,最大值和最小值。因此,在下面的示例中,我想总结一下" Jim"的平均值,最小值和最大值。商店,"仁,商店等,以及每组商店中所有家具的相同价值。

shop    tables  chairs  beds
jim-1   2   63  31
jim-2a  10  4   16
jim-2b  32  34  43
jen-1   32  90  32
jen-2   73  91  6
jen-3   35  85  65
sam-a   72  57  72
sam-b   18  48  11
sam-c   34  49  79
paul-1  43  49  23
paul-2  76  20  23
paul-2a 34  20  8

请注意,有些商店是1,2,3或者a,b,c等,并且名称中可以有可变数量的字母(jim vs paul)。我希望我的输出类似于:

shop_group  tables_av   tables_min  tables_max  chairs_av   chairs_min  chairs_max  beds_av beds_min    beds_max    furniture_av    furniture_min   furniture_max
jim 14.67   2.00    32.00   33.67   4.00    63.00   30.00   16.00   43.00   78.33   30.00   109.00
jen 46.67   32.00   73.00   88.67   85.00   91.00   34.33   6.00    65.00   169.67  154.00  185.00
sam 41.33   18.00   72.00   51.33   48.00   57.00   54.00   11.00   79.00   146.67  77.00   201.00
paul    51.00   34.00   76.00   29.67   20.00   49.00   18.00   8.00    23.00   98.67   62.00   119.00

提前致谢...

2 个答案:

答案 0 :(得分:1)

只需构建商店组,并使用聚合和摘要来获得您正在寻找的输出。

shop_group = sub("-.*", "", df$shop)
aggregate(df[,2:4], list(shop_group), 
     FUN = function(x) summary(x)[c(4,1,6)])
  Group.1 tables.Mean tables.Min. tables.Max. chairs.Mean chairs.Min. chairs.Max. beds.Mean beds.Min. beds.Max.
1     jen       46.67       32.00       73.00       88.67       85.00       91.00     34.33      6.00     65.00
2     jim       14.67        2.00       32.00       33.67        4.00       63.00     30.00     16.00     43.00
3    paul       51.00       34.00       76.00       29.67       20.00       49.00     18.00      8.00     23.00
4     sam       41.33       18.00       72.00       51.33       48.00       57.00     54.00     11.00     79.00

答案 1 :(得分:0)

我仍然不知道为什么数据框没有正确输出,但是为了防止其他人遇到同样的问题,这是同事提出的解决方案:

library(tibble)
library(dplyr)
library(magrittr)
df %>% 
mutate(shop = gsub("-.*", "", shop)) %>%
group_by(shop) %>%
summarise_each(funs(mean, min, max)) -> summary_df
相关问题