首页 > 解决方案 > 在 R 中使用 dplyr 对对象内的日期进行排序

问题描述

我有以下数据:

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”的方法应用于“函数”类的对象

我试图了解我做错了什么。有人可以帮忙吗?

标签: rsortingdplyrplyr

解决方案


我对你想要的最好的猜测是一个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)

推荐阅读