Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个R函数可以根据其他列标准对日期/时间进行排序?_R_Sorting_Date_Rank - Fatal编程技术网

是否有一个R函数可以根据其他列标准对日期/时间进行排序?

是否有一个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

我感兴趣的是将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, 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]