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

Vas*_*sim 2 sorting r shiny dt

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

我在查看器窗格中得到一个数据表,该数据表以以下格式“日期:2017年5月22日”显示日期。

问-如何将日期栏的格式设置为“ MM-YY”

如果我做,

dplyr::mutate(seq_dates, dates = format(dates, format = "%b-%Y")) %>%
  datatable()
Run Code Online (Sandbox Code Playgroud)

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

PS-我正在闪亮地实现这一点。

小智 5

您好,在这些情况下,我认为最好的解决方案是添加一个虚拟列,使其原始格式的日期与date列根据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)
             )
           ))
Run Code Online (Sandbox Code Playgroud)


小智 0

正如我所见,将"%b-%y"“日期”转换为日期格式并不是一件容易的事情......

如果您不太执着于显示"%b-%y"格式,最简单的方法是使用"%Y-%m"or "%y-%m"format ,过滤器将正常工作:

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
Run Code Online (Sandbox Code Playgroud)