使用 R 中的 dplyr 对对象内的日期进行排序
Sorting dates within objects using dplyr in R
我有以下数据:
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),]
})
我收到错误:
Error in UseMethod("as.quoted") : no applicable method for
'as.quoted' applied to an object of class "function"
我正在努力了解我做错了什么。有人可以帮忙吗?
我最好的猜测是 plyr
解决方案,使用 ddply
,并使用 Year
而不是 date
:
require(plyr)
ddply(df, "Number", function(datesort) datesort[order(datesort$Year),])
但是考虑到这个 post 被标记为 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)
我有以下数据:
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),]
})
我收到错误:
Error in UseMethod("as.quoted") : no applicable method for 'as.quoted' applied to an object of class "function"
我正在努力了解我做错了什么。有人可以帮忙吗?
我最好的猜测是 plyr
解决方案,使用 ddply
,并使用 Year
而不是 date
:
require(plyr)
ddply(df, "Number", function(datesort) datesort[order(datesort$Year),])
但是考虑到这个 post 被标记为 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)