R 按其他列中日期的顺序计算列
我想做一个简单的任务,但不知道如何做。 我有一个数据帧(实际上是data.table),类似于:R 按其他列中日期的顺序计算列,r,data.table,R,Data.table,我想做一个简单的任务,但不知道如何做。 我有一个数据帧(实际上是data.table),类似于: date code1 2015-03-01 A 2015-03-02 A 2015-03-03 A 2015-03-01 B 2015-03-02 B 2015-03-03 B 我想要一个新的列,日期顺序按代码1排列,如下所示: date code1 order 2015-03-01 A 1
date code1
2015-03-01 A
2015-03-02 A
2015-03-03 A
2015-03-01 B
2015-03-02 B
2015-03-03 B
我想要一个新的列,日期顺序按代码1排列,如下所示:
date code1 order
2015-03-01 A 1
2015-03-02 A 2
2015-03-03 A 3
2015-03-01 B 1
2015-03-02 B 2
2015-03-03 B 3
提前感谢。使用
数据。表
:
dt[, order := seq(.N), by = code1]
> dt
# date code1 order
#1: 2015-03-01 A 1
#2: 2015-03-02 A 2
#3: 2015-03-03 A 3
#4: 2015-03-01 B 1
#5: 2015-03-02 B 2
#6: 2015-03-03 B 3
我们可以使用
dplyr
library(dplyr)
df %>%
group_by(code1) %>%
mutate(Order = row_number())
date code1 Order
# (chr) (chr) (int)
#1 2015-03-01 A 1
#2 2015-03-02 A 2
#3 2015-03-03 A 3
#4 2015-03-01 B 1
#5 2015-03-02 B 2
#6 2015-03-03 B 3
正如@alistaire所提到的,如果“日期”列没有排序,我们可以使用排列
在分组_by
后按“日期”排序,然后使用mutate
或使用秩
创建序列
df %>%
group_by(code1) %>%
mutate(Order = rank(date))
或者使用
splitstackshape
library(splitstackshape)
getanID(df, 'code1')[]
或使用
base R
df$Order <- with(df, ave(seq_along(code1), code1, FUN= seq_along))
df$Order[datatable]或[data.table]?在base R中,由“data.table”包转换的df$Order数据帧unlist(tapply(df$date,df$code1,seq_-along))
…或更好,如果它们不在顺序中,取消列表(tapply(df$date,df$code1,rank))
,如果它们不在顺序中,做df%>%groupby(code1)%>%mutate(order=rank(date))可能更安全些。
这就是我们要找的。它在超过1亿行的数据帧中表现得非常好。谢谢在下一个版本中,还可以执行以下操作:dt[,order:=rowid(code1)]
。