用重复项修改 seq_along

Modifying seq_along with duplicates

这里有seq专家吗?

我想计算每个 ID 的值数量。以正确的顺序从 1 数到 n 可以正常工作。但是重复的值应该用相同的数字标记。

seq 中我缺少任何参数吗?

代表。例如:其中 "count_n" 是我实际创建的值,而 "need" 是所需的输出。

提前谢谢你。干杯

Date <- as.Date(c('2006-08-30','2006-08-30','2006-08-23', '2006-09-06', 
'2006-09-13', '2006-09-20'))
ID <- c("x1","x1","x1","X2","X3","x1")
need<- c(2,2,1,1,1,3)
df<-data.frame(ID,Date,need)

df<- df%>% arrange(Date)
df$count_n <- ave(as.numeric(df$Date),df$ID,FUN = seq_along) 
  ID       Date need count_n
1 x1 2006-08-23    1       1
2 x1 2006-08-30    2       2
3 x1 2006-08-30    2       3
4 X2 2006-09-06    1       1
5 X3 2006-09-13    1       1
6 x1 2006-09-20    3       4

我们可以将每个 IDDate 转换为 factor,这将为每个 Date

提供唯一的值
ave(as.integer(df$Date),df$ID,FUN = factor)
#[1] 1 2 2 1 1 3

我们也可以使用 dense_rankdplyr

library(dplyr)
df %>%
  group_by(ID) %>%
  mutate(count_n = dense_rank(Date))

#  ID    Date        need count_n
#  <fct> <date>     <dbl>   <int>
#1 x1    2006-08-23     1       1
#2 x1    2006-08-30     2       2
#3 x1    2006-08-30     2       2
#4 X2    2006-09-06     1       1
#5 X3    2006-09-13     1       1
#6 x1    2006-09-20     3       3

我们可以在 sorted 'Date'

上使用 match
library(dplyr)
df %>% 
   group_by(ID) %>%
   mutate(need = match(Date, sort(unique(Date))))