反向排序dplyr的group_ by()

时间:2015-09-05 19:31:42

标签: r dplyr

我正在为我正在处理的包编写一个print方法。它的基本任务是显示按日期分组的一组任务。因为在控制台上工作意味着打印的最后一件事最接近提示,所以我希望最后列出最旧的日期。没有打印方法和调度的所有麻烦,核心代码就是这样的:

d <- data.frame(thr = as.Date(Sys.time()) + seq(-3,3,1),
                tsk = paste0('t', 1:7), stringsAsFactors = FALSE)
d %>% group_by(thr) %>% 
  do(x = {
      thr <- format(.$thr, '%d-%m-%Y')
      cat(thr, '\n', .$tsk, '\n') 
     }) 

这会生成

02-09-2015 
 t1 
03-09-2015 
 t2 
04-09-2015 
 t3 
05-09-2015 
 t4 
06-09-2015 
 t5 
07-09-2015 
 t6 
08-09-2015 
 t7 

但是我想按时间倒序排序,以便最后打印最旧的日期:

08-09-2015
 t7
07-09-2015
 t6 
...

在普通(非打印代码)中,使用编号(-thr)很容易,但是我还没有找到在打印功能中执行此操作的方法。

2 个答案:

答案 0 :(得分:3)

library(dplyr)
library(magrittr)

data.frame(thr = as.Date(Sys.time()) + c(seq(-3,3,1), seq(-3,3,1)),
           tsk = paste0('t', c(1:14)), stringsAsFactors = FALSE) %>%
  arrange(tsk) %>%
  group_by(thr) %>%
  summarize(
    tsk_out = 
      paste(
        thr %>% first %>% format('%d-%m-%Y'),
        '\n',
        tsk %>% unique %>% paste(collapse = " "),
        '\n') ) %>%
  arrange(desc(thr)) %>%
  use_series(tsk_out) %>%
  cat

答案 1 :(得分:1)

NA的答案移到了顶部。

library(dplyr)
library(magrittr)
options(stringsAsFactors = FALSE)

data.frame(thr = 
             as.Date(Sys.time()) + c(seq(-3,3,1), seq(-3,3,1)) %>%
             c(NA),
           tsk = paste0('t', 1:15)) %>%
  arrange(tsk) %>%
  group_by(thr) %>%
  summarize(
    tsk_out = 
      paste(
        thr %>% first %>% format('%d-%m-%Y'),
        '\n',
        tsk %>% unique %>% paste(collapse = " "),
        '\n') ) %>%
  arrange(thr %>% order(na.last = FALSE, decreasing = TRUE)) %>% 
  use_series(tsk_out) %>%
  cat