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

我在查看器窗格中得到一个数据表,显示日期格式为“Mon May 22 2017”。Datatable输出中的格式日期

Q - 如何格式化日期列作为“MM-YY”

如果我这样做,

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

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

PS - 我正在实施这个亮点。

回答

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

喜在这种情况下我认为最好的办法是在原单格式中的日期添加一个虚拟列,并有日期列根据该值进行排序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) 
      ) 
      )) 
+0

不错的解决方法。我希望用'formatDate()'的解决方案。如果几天内没有更直接的解决方案,我会验证你的。 –

+0

由于我(OP)需要MM-YY格式,因此我将日期列转换为适当级别的因子 - 这就实现了! – Vasim

+0

@Vasim很酷,你找到了你自己的解决方案,但由于我的解决方案允许使用各种日期格式,所以我不认为你有任何需要投票回答。 –