我在R中有一个日期和数值的数据框。日期是该月的第一个,值是与该月相关的数字
library(DT)
library(dplyr)
df <- data.frame(date = as.Date(c("2017-01-01","2017-02-01","2017-03-01","2017-04-01")),
val = c(-5600,7000,4200,-2000))
我想通过DT::datatable()
来坚持这一点,这是我最喜欢的事情。但是,我希望输出格式很好,千位分隔符,漂亮的日期等等。
df <- df %>% mutate(val = formatC(val, big.mark=","))
datatable(df)
这会将val
转换为字符向量,但datatable()
显然能够识别出它确实是一个数字,并使用标题中的箭头进行适当排序。到目前为止一切都很好。
然而,当我尝试将日期格式化为MMM YY时会出现问题。
df <- df %>% mutate(date = format(date, "%b %y"))
datatable(df)
这也将日期转换为字符向量 - 值看起来像&#34; Jan 17&#34;一切看起来都很好,唯一的麻烦就是当我按date
排序时,它不会将这些值识别为几个月,并按字母顺序而不是按时间顺序排列。
是否有任何方法可以在将日期传递到datatable()
之前或同时重新格式化日期,以保持日期&#34;日期&#34;变量并允许它适当地排序?如果失败了,是否有另一个输出交互式表的包并且更好地进行排序?
提前致谢,
詹姆斯
答案 0 :(得分:0)
你可以得到lubridate包的帮助。 并使用此功能完成这些工作。
您需要做的是分别考虑月份和日期。
library(lubridate)
date_conversion<-function(df){
months<-month(df$date,label = T)
years<-year(df$date)
months_years<-paste(months, years, sep = " ")
df[1]<-months_years
df[order(row.names(df),decreasing = F),]
}
希望这可以帮助你.... :)