用重复项修改 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
我们可以将每个 ID
的 Date
转换为 factor
,这将为每个 Date
提供唯一的值
ave(as.integer(df$Date),df$ID,FUN = factor)
#[1] 1 2 2 1 1 3
我们也可以使用 dense_rank
和 dplyr
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
我们可以在 sort
ed 'Date'
上使用 match
library(dplyr)
df %>%
group_by(ID) %>%
mutate(need = match(Date, sort(unique(Date))))
这里有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
我们可以将每个 ID
的 Date
转换为 factor
,这将为每个 Date
ave(as.integer(df$Date),df$ID,FUN = factor)
#[1] 1 2 2 1 1 3
我们也可以使用 dense_rank
和 dplyr
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
我们可以在 sort
ed 'Date'
match
library(dplyr)
df %>%
group_by(ID) %>%
mutate(need = match(Date, sort(unique(Date))))