格式化表格中的数据时丢失日期范围的顺序

时间:2017-06-22 13:11:33

标签: r date

以下是一些随机数据:

library(dplyr)
library(tidyr)

channels <- c("Facebook", "Youtube", "SEM", "Organic", "Direct", "Email")
mts <- seq(from = last_month %m+% months(-23), to = last_month, by = "1 month") %>% as.Date()
dimvars <- expand.grid(Month = mts, Channel = channels)
rws <- nrow(dimvars)
Sessions <- round(rnorm(rws, 5000),0)
dataset <- cbind(dimvars, Sessions)

以下是使用此随机数据的表格:

sessionsTable <- dataset %>%
mutate(Month = format(Month, "%b-%Y")) %>%
gather(Key, Value, -Channel, -Month) %>%
spread(Month, Value) %>%
select(-Key) %>%
mutate_at(vars(-Channel), funs(. %>% round(0) %>% scales::comma()))

这就是它的样子:

> sessionsTable
   Channel Apr-2016 Apr-2017 Aug-2015 Aug-2016 Dec-2015 Dec-2016 Feb-2016 Feb-2017 Jan-2016 Jan-2017 Jul-2015 Jul-2016 Jun-2015 Jun-2016
1 Facebook   14,852    7,604    8,841   16,429   20,720   21,527   10,960   13,824   14,394   19,163    1,047   19,209    2,198   18,655
2  Youtube   11,566   12,452    3,410   15,940       67    3,197    3,068   20,082    1,408   14,042    7,599   17,469      834   17,779
3      SEM   23,606   28,385   14,868   22,406   20,225   15,713   20,064   20,589   27,807   15,978   13,601   24,072   14,018   26,584
4  Organic   12,796   40,916   14,882   22,058   13,388   33,316   12,723   37,252   12,694   36,058   18,322   16,574   21,868   14,915
5   Direct   36,057   19,386   55,336   27,534   46,702   24,804   40,207   26,838   44,965   26,310   56,514   30,411   48,851   25,816
6    Email   15,966    4,768    7,663    6,051   13,520   17,650    9,100   13,939   13,909   10,430   10,116   16,317   14,854   18,430
  Mar-2016 Mar-2017 May-2016 May-2017 Nov-2015 Nov-2016 Oct-2015 Oct-2016 Sep-2015 Sep-2016
1    8,732   12,734   16,651    3,959   18,415   18,020    9,840   27,853    9,193   25,364
2    7,458   14,466   15,009   10,118    2,065    9,524    8,334   10,564    2,643   14,037
3   22,987   30,840   24,686   16,839   21,354   13,472   14,511   11,954   14,725   17,313
4   14,649   34,112   16,018   37,914   12,482   28,349   18,586   22,605   20,009   24,234
5   39,981   23,635   27,717   14,265   47,936   22,207   46,651   22,485   50,203   30,574
6    8,743   12,628   18,224    2,806   12,343    8,104   15,602    4,405    6,383   11,708

问题在于它不是按数据趋势而是按月按字母顺序排列。 2016年4月,2017年4月。我想要的是2016年4月,2016年5月,2016年6月,等等。

如果我遗漏这一行mutate(Month = format(Month, "%b-%Y")) %>% 按照我想要的方式进行排序,然后我的月份列显示完整日期,例如2015-06-01和2015-07-01等。

如何按照我的首选格式按月订购趋势表格,例如&#34; 2016年4月&#34;,&#34; 2016年5月&#34;,&#34; 2016年6月&#34;等?

1 个答案:

答案 0 :(得分:1)

如果您希望矢量具有漂亮的标签和排序,则可以使用因子。具体而言,您创建一个有序因子,其值为格式化月份,其级别为正确顺序的唯一格式化月份。

sessionsTable <- dataset %>%
  mutate(Month = ordered(
    format(Month, "%b-%Y"),
    levels = format(sort(unique(Month)), "%b-%Y")
  )) %>%
  gather(Key, Value, -Channel, -Month) %>%
  spread(Month, Value) %>%
  select(-Key) %>%
  mutate_at(vars(-Channel), funs(. %>% round(0) %>% scales::comma()))