Сортировка дат внутри объектов с использованием dplyr в R - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующие данные:

Number     Year
 1       2001-01-01
 1       2001-02-01
 1       2002-03-01
 1       2001-03-01
 1       1999-07-01
 2       2001-01-01
 2       2001-02-01
 2       2002-03-01
 2       2001-03-01
 2       1999-07-01
 3       2001-01-01
 3       2001-02-01
 3       2002-03-01
 3       2001-03-01
 3       1999-07-01

Теперь мне нужно отсортировать даты по каждому числу.Я хочу, чтобы мой окончательный результат выглядел следующим образом.

Number     Year
 1       1999-07-01
 1       2001-01-01
 1       2001-02-01
 1       2001-03-01
 1       2002-03-01
 2       1999-07-01
 2       2001-01-01
 2       2001-02-01
 2       2001-03-01
 2       2002-03-01
 3       1999-07-01
 3       2001-01-01
 3       2001-02-01
 3       2001-03-01
 3       2002-03-01

Это упрощенная форма моих данных.Я пытался использовать dplyr.

Это мой код:

df <- ddply(df, by = 'Number', function(datesort){
  datesort[order(datesort$date),]

  })

Я получаю ошибку:

Ошибка в UseMethod ("as.quoted"): нет применимого метода для 'as.quoted 'применяется к объекту класса "function"

Я пытаюсь понять, что я делаю неправильно.Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 21 мая 2018

Мое лучшее предположение для того, что вы искали, - это решение plyr с ddply и использованием Year вместо date:

require(plyr)

ddply(df, "Number", function(datesort) datesort[order(datesort$Year),])

Но, учитывая, что этот постс тегом dplyr, вот решение dplyr:

require(tidyverse)

df %>% arrange(Number, Year)

Вывод обоих решений:

   Number Year      
    <int> <date>    
 1      1 1999-07-01
 2      1 2001-01-01
 3      1 2001-02-01
 4      1 2001-03-01
 5      1 2002-03-01
 6      2 1999-07-01
 7      2 2001-01-01
 8      2 2001-02-01
 9      2 2001-03-01
10      2 2002-03-01
11      3 1999-07-01
12      3 2001-01-01
13      3 2001-02-01
14      3 2001-03-01
15      3 2002-03-01

Данные:

zz <-"Number     Year
 1       2001-01-01
 1       2001-02-01
 1       2002-03-01
 1       2001-03-01
 1       1999-07-01
 2       2001-01-01
 2       2001-02-01
 2       2002-03-01
 2       2001-03-01
 2       1999-07-01
 3       2001-01-01
 3       2001-02-01
 3       2002-03-01
 3       2001-03-01
 3       1999-07-01"

df <- read.table(text=zz, header=TRUE)
...