【发布时间】:2017-12-28 16:52:05
【问题描述】:
下面的 df 与我的原始数据具有相似的结构。我在这里要完成的是按“id”对数据进行分组,取这些组的平均利润,然后根据它们的平均值对组进行重新排序。
>mydata <- structure(list(id = c("A", "A", "A", "A", "B", "B", "B", "B",
"C", "C", "C", "D", "D"), year = c(2000L, 2001L, 2002L, 2003L,
2000L, 2001L, 2002L, 2003L, 2000L, 2002L, 2003L, 2000L, 2001L
), sales = c(2000L, 2050L, 2100L, 2150L, 2200L, 2250L, 2300L,
2350L, 2400L, 2500L, 2550L, 2600L, 2650L), profit = c(200L, 245L,
290L, 335L, 380L, 425L, 470L, 515L, 560L, 650L, 695L, 740L, 785L
)), .Names = c("id", "year", "sales", "profit"), row.names = c(NA,
13L), class = c("data.table", "data.frame"))
> mydata
id year sales profit
1 A 2000 2000 200
2 A 2001 2050 245
3 A 2002 2100 290
4 A 2003 2150 335
5 B 2000 2200 380
6 B 2001 2250 425
7 B 2002 2300 470
8 B 2003 2350 515
9 C 2000 2400 560
10 C 2002 2500 650
11 C 2003 2550 695
12 D 2000 2600 740
13 D 2001 2650 785
按“id”对数据进行分组并计算每组的平均值
group_mean=mydata%>%group_by(id)%>%summarise(m=mean(profit))%>%arrange(desc(m))
> group_mean
# A tibble: 4 x 2
id m
<chr> <dbl>
1 D 762.5
2 C 635.0
3 B 447.5
4 A 267.5
请注意,在原始数据中,组的顺序是第一个“A”,第二个“B”,第三个“C”,依此类推。但是按降序排列的组平均值显示“D”具有最大值,然后“C”具有第二大值,然后是“B”,最后是“A”。这是我希望放置原始数据的顺序,结果 df 如下所示。
> newdata
id year sales profit
1 D 2000 2600 740
2 D 2001 2650 785
3 C 2000 2400 560
4 C 2002 2500 650
5 C 2003 2550 695
6 B 2000 2200 380
7 B 2001 2250 425
8 B 2002 2300 470
9 B 2003 2350 515
10 A 2000 2000 200
11 A 2001 2050 245
12 A 2002 2100 290
13 A 2003 2150 335
你看,组内的顺序保持不变,需要改变的是组的顺序。另一个问题,我怎样才能根据 2000 年的销售数字完成类似的分组重新排序。 感谢您的时间和提前回答,如果我是 R 新手,如果答案能简单一点,我将不胜感激。
【问题讨论】: