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 - 我正在闪亮地实现这一点。
答案 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/2017
和10/2017
。
我试图找到这些参数选项(在github和原始数据表文档中),但无济于事。 DT中唯一的示例使用short
,long
和numeric
的参数。