数据表输出中的格式化日期

时间:2017-06-01 09:34:01

标签: r sorting shiny dt

library(DT)
seq_dates <- data.frame(dates = as.Date("2017-01-01") + 1:6 * 100)
datatable(seq_dates) %>% formatDate(1, "toDateString")

我在查看器窗格中显示一个数据表,显示日期格式为“2017年5月22日星期一”。

问:如何将日期列格式化为“MM-YY”

如果我这样做,

dplyr::mutate(seq_dates, dates = format(dates, format = "%b-%Y")) %>%
  datatable()

我得到了所需的日期格式,但在第二种情况下,列排序不起作用(排序是在字母而不是日期上完成的。)

P.S - 我正在闪亮地实现这一点。

3 个答案:

答案 0 :(得分:4)

嗨,在这些情况下,我认为最好的解决方案是添加一个带有原始格式的日期的虚拟列,并根据DUMMY列中的值对日期列进行排序。这很容易在 Datatable 中完成。下面的示例代码。

seq_dates <- data.frame(dates = as.Date("2017-01-01") + 1:6 * 100)
datatable(seq_dates %>% mutate(DUMMY = dates,dates = format(dates, format = "%b-%Y")),
          options = list(
            columnDefs = list(
              list(targets = 1,orderData = 2),
              list(targets = 2, visible = FALSE)
             )
           ))

答案 1 :(得分:0)

"%b-%y"“日期”转换为日期格式并非易事,因为我看到......

如果您不太关注显示"%b-%y"格式,那么简单的方法就是使用"%Y-%m""%y-%m"格式,过滤器就可以正常运行:

library(DT)

seq_dates <- as.data.frame(seq(Sys.Date() - 100, Sys.Date(), by = "m"))
seq_dates <- format(seq_dates, format = "%y-%m")

datatable(seq_dates)

#resulting in

#1        2017-02
#2        2017-03
#3        2017-04
#4        2017-05

#or

#1        17-02
#2        17-03
#3        17-04
#4        17-05

答案 2 :(得分:0)

对于它的价值(并使用formatDate),我能做的最好的事情如下:

datatable(seq_dates) %>% 
  formatDate(
    columns = 1, 
    method =  "toLocaleDateString", 
    params = list(
      'en-US', 
      list(
        year = 'numeric', 
        month = 'numeric')
      )
    )

这会产生日期值4/201710/2017

我试图找到这些参数选项(在github和原始数据表文档中),但无济于事。 DT中唯一的示例使用shortlongnumeric的参数。