是否有一个R函数可以根据其他列标准对日期/时间进行排序?
我感兴趣的是将dataf中的date列更改为与results$order中的id对应的有序数字(最早的日期=1,最早的第二个日期=2…等等)。如果一个id只出现一次,我希望订单为1是否有一个R函数可以根据其他列标准对日期/时间进行排序?,r,sorting,date,rank,R,Sorting,Date,Rank,我感兴趣的是将dataf中的date列更改为与results$order中的id对应的有序数字(最早的日期=1,最早的第二个日期=2…等等)。如果一个id只出现一次,我希望订单为1 date=c("2012-02-18", "2013-03-01", "2013-04-11", "2013-06-06", "2013-09-20", "2013-07-02") datef=strptime(date, format="%Y-%m-%d") dataf=data.frame(id=c(20, 20
date=c("2012-02-18", "2013-03-01", "2013-04-11", "2013-06-06", "2013-09-20", "2013-07-02")
datef=strptime(date, format="%Y-%m-%d")
dataf=data.frame(id=c(20, 20, 20, 21, 21, 22),
date=datef,
service=c("web", "phone", "person", "phone", "web", "web"))
> dataf
id date service
1 20 2012-02-18 web
2 20 2013-03-01 phone
3 20 2013-04-11 person
4 21 2013-06-06 phone
5 21 2013-09-20 web
6 22 2013-07-02 web
我甚至很难找到正确的措辞来寻找这个困境的答案。我是想胁迫吗?还是索引?dataf$日期是否按下面的结果$顺序排列
results=data.frame(id=c(20, 20, 20, 21, 21, 22),
order=c(1,2,3,1,2,1),
service=c("web", "phone", "person", "phone", "web", "web"))
> results
id order service
1 20 1 web
2 20 2 phone
3 20 3 person
4 21 1 phone
5 21 2 web
6 22 1 web
使用
dplyr
:
library(dplyr)
dataf %>% group_by(id) %>% mutate(order = rank(date))
# # A tibble: 6 x 4
# # Groups: id [3]
# id date service order
# <dbl> <dttm> <fct> <dbl>
# 1 20 2012-02-18 00:00:00 web 1
# 2 20 2013-03-01 00:00:00 phone 2
# 3 20 2013-04-11 00:00:00 person 3
# 4 21 2013-06-06 00:00:00 phone 1
# 5 21 2013-09-20 00:00:00 web 2
# 6 22 2013-07-02 00:00:00 web 1
库(dplyr)
dataf%%>%分组依据(id)%%>%变异(顺序=排名(日期))
##tibble:6 x 4
##组:id[3]
#id日期服务订单
#
#1202012-02-1800:00:00Web1
#2202013-03-01 00:00:00电话2
#32013-04-11100:00:00人3
#421 2013-06-06 00:00:00电话1
#521 2013-09-20 00:00:00网络2
#6 22 2013-07-02 00:00:00网络1
带有数据。表
:
library(data.table)
setDT(dataf)
setorder(dataf, id, date)
dataf[, order := 1:.N, by = id]
> dataf
id date service order
1: 20 2012-02-18 web 1
2: 20 2013-03-01 phone 2
3: 20 2013-04-11 person 3
4: 21 2013-06-06 phone 1
5: 21 2013-09-20 web 2
6: 22 2013-07-02 web 1
为什么
id=20
手机在同一id的人员输入之前被排在第三位?@r2evans-oops已修复。我猜正确的搜索词应该按日期排序?谢谢,约会并不重要。“按组排列”很好。但实际上,您只需要找到rank
函数,找到任何“按组”进行操作的方法,并将它们放在一起。(您也可以使用data.table
,与另一个答案相同,但作为dataf[,order:=rank(date),by id]