我已经计算了此data.frame中每月的最大数量:
counts <- data.frame(year = sort(rep(2000:2009, 12)), month = rep(month.abb,10), count = sample(1:500, 120, replace = T))
library(plyr)
count_max <- ddply(counts, .(month), summarise, max.count = max(count))
month max.count
1 Apr 470
2 Aug 389
3 Dec 446
4 Feb 487
5 Jan 473
6 Jul 460
7 Jun 488
8 Mar 449
9 May 488
10 Nov 464
11 Oct 483
12 Sep 394
我现在想要按count_max
向量对month.abb
进行排序,以便month
按照通常的顺序在Jan-Dec中进行。这就是我试过的:
count_max[match(count_max$month, month.abb),]
......但它不起作用。如何在1月至12月的订单中安排count_max$month
答案 0 :(得分:3)
没有转化的替代方案:
count_max[order(match(count_max$month, month.abb)), ]
# month max.count
# 5 Jan 466
# 4 Feb 356
# 8 Mar 496
# 1 Apr 489
# 9 May 498
# 7 Jun 497
# 6 Jul 491
# 2 Aug 446
# 12 Sep 414
# 11 Oct 490
# 10 Nov 416
# 3 Dec 475
请注意,在您的示例中,match(count...)
会在month.abb
中返回给定月份的位置,这是您要排序的内容。你真的很接近,但不是按照那个向量进行排序,而是用它进行子集化。因此,例如,8月是原始DF中的第2个值,但是month.abb
中的第8个值,因此子集向量中第2个值的匹配值为8,这意味着您将放置第8个值您的原始数据框的行(在您的情况下为March),进入新DF的第二个位置,而不是将原始DF中的第二行排列到新DF的第8位。
这种区别有点像是一种大脑扭曲,但如果你认为它应该是有道理的。
答案 1 :(得分:1)
将“月”列转换为有序的factor
:
factor(count_max$month, month.abb, ordered=TRUE)
# [1] Apr Aug Dec Feb Jan Jul Jun Mar May Nov Oct Sep
# Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < Oct < Nov < Dec
示例:
count_max$month <- factor(count_max$month, month.abb, ordered=TRUE)
count_max[order(count_max$month), ]
# month max.count
# 5 Jan 482
# 4 Feb 408
# 8 Mar 483
# 1 Apr 489
# 9 May 369
# 7 Jun 432
# 6 Jul 344
# 2 Aug 470
# 12 Sep 474
# 11 Oct 450
# 10 Nov 492
# 3 Dec 366