如何按月排序或排序?

时间:2018-11-09 12:26:48

标签: r dplyr data.table

我有数据框,并根据需要用GET test_stack_overflow/document/_search { "query": { "nested": { "path": "names", "query": { "bool": { "must": [ { "match": { "names.value": "downing" } } ], "should": [ { "term": { "names.type": "Primary Name" } } ] } } } } } 将输出制成表格:

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)

输出符合我的要求,但月份顺序放错了位置。

任何包装都可以达到相同的目的吗?或任何最简单的方法来获取相同的数据?

2 个答案:

答案 0 :(得分:4)

我建议将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>

答案 1 :(得分:0)

希望这是OP的目标:

library(tidyverse)
df1<-as.tibble(df1)
df1 %>% 
 arrange(Month)


     Year Month category1 catergory2 lic   count
   <int> <fct> <fct>     <fct>      <fct> <int>
 1  2016 Apr   a         N          F       745
 2  2016 Apr   b         K          F       346
 3  2016 Apr   b         O          T        61
 4  2016 Apr   a         J          T       680
 5  2018 Apr   d         O          P       308
 6  2017 Apr   e         M          F       408
 7  2016 Apr   b         P          P       474
 8  2017 Apr   b         O          P       332
 9  2016 Apr   b         P          F       321
10  2017 Apr   e         N          T       384
# ... with 90 more rows