Order dataframe by month

前端 未结 2 1756
梦毁少年i
梦毁少年i 2021-01-16 20:25

I have calculated the maximum counts per month in this data.frame:

counts <- data.frame(year = sort(rep(2000:2009, 12)), month = rep(month.abb,10), count          


        
相关标签:
2条回答
  • 2021-01-16 20:47

    An alternate without conversion:

    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         
    

    Note that in your example, match(count...) returns the position of a given month in month.abb, which is what you want to sort by. You came real close, but instead of sorting by that vector, you subsetted by it. So, for example, August is the 2nd value in your original DF, but the 8th value in month.abb, so the match value for the 2nd value in your subset vector is 8, which means you are going to put the 8th row of your original data frame (in your case March), into the second position of your new DF, instead of ranking the 2nd row in your original DF into 8th position of the new one.

    The distinction is a bit of a brain twister, but if you think it through it should make sense.

    0 讨论(0)
  • 2021-01-16 20:53

    Convert your "month" column into an ordered 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
    

    Example:

    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
    
    0 讨论(0)
提交回复
热议问题