我想创建一个摘要数据框,根据文本前缀收集所有行,每个变量的平均值,最大值和最小值。因此,在下面的示例中,我想总结一下" 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
提前致谢...
答案 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