首页 > 解决方案 > 如何按月排序或排序?

问题描述

我有数据框,并且根据我的要求将输出制成表格xtabs

df1<-data.frame(
  Year=sample(2016:2018,100,replace = T),
  Month=sample(month.abb,100,replace = T),
  category1=sample(letters[1:6],100,replace = T),
  catergory2=sample(LETTERS[8:16],100,replace = T),
  lic=sample(c("P","F","T"),100,replace = T),
  count=sample(1:1000,100,replace = T)
)

代码 :

xtabs(count~Month+category1+lic,data=df1)

输出 :

, , lic = F

     category1
Month    a    b    c    d    e    f
  Apr    0    0    0    0    0    0
  Aug  418    0    0    0    0  208
  Dec  628    0    0    0    0    0
  Feb    0    0    0  968    0  701
  Jan  388    0    0    0    0    0
  Jul  771    0    0    0    0 2514
  Jun  987  913    0  216    0  395
  Mar  454    0    0    0    0  314
  May    0 1298    0    0    0    0
  Nov  906    0  526  262    0 1417
  Oct  783    0  853  336  310  286
  Sep    0    0    0    0  928    0

, , lic = P

     category1
Month    a    b    c    d    e    f
  Apr   13    0    0    0    0    0
  Aug    0  774    0    0  416  652
  Dec    0    0    0  241  462  123
  Feb  150  857    0  169    6    1
  Jan  954    0  567    0    0    0
  Jul  481    0    0    0    0  846
  Jun    0    0    0  484    0  535
  Mar  751    0    0    0  241    0
  May    0  549   37    0    0    2
  Nov  649    0    0    0  154  692
  Oct    0    0  182    0    0    0
  Sep    0    0  585    0  493    0

, , lic = T

     category1
Month    a    b    c    d    e    f
  Apr    0    0  410    0    0    0
  Aug    0    0    0    0    0    0
  Dec    0    0  833  289  811    0
  Feb    0 1223    0  716  366  552
  Jan  555    0  802    0 1598    0
  Jul    0    0   69    0    0  696
  Jun    0    0    0    0  190    0
  Mar    0 1165    0    0    0    0
  May  979  951  676    0    0    0
  Nov  267    0   79 1951  290  530
  Oct  230   78    0  679  321    0
  Sep    0  871    0    0    0    0

输出符合我的要求,但月份顺序错误。

我可以用任何包装实现同样的目标吗?或任何最简单的方法来获取相同的数据?

标签: rdplyrdata.table

解决方案


我建议做Month一个有序的因素:

df1$Month <- ordered(df1$Month, levels = month.abb)

xtabs(count~Month+category1+lic,data=df1)
#, , lic = F
#
#     category1
#Month    a    b    c    d    e    f
#  Jan    0    0    0    0  563    0
#  Feb    0    0    0  826    0    0
#  Mar    0    0    3  685  443  814
#  Apr    0  848    0  474    0    0
#  May  192  412 1942    0  803  545
#  Jun  593    0    0    0  520  807
#  Jul  829  745    0    0  926    0
#  Aug 1474    0  603  376    0  706
#  Sep    0    0    0  173    0    0
#  Oct    0    0  661  915  814    0
#  Nov    0  881    0    0    0    0
#  Dec    0    0    0    0    0    0
#</snip>

推荐阅读