在R

时间:2017-08-10 16:42:40

标签: r sorting date formatting

我在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;变量并允许它适当地排序?如果失败了,是否有另一个输出交互式表的包并且更好地进行排序?

提前致谢,

詹姆斯

1 个答案:

答案 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),]

}

希望这可以帮助你.... :)