R 对列中的值进行计数,然后重置

R 对列中的值进行计数,然后重置,r,R,我正在尝试创建一个列,该列计算名称的数量,每次不同时都从头开始,如下所示: NAME ID PIERRE 1 PIERRE 2 PIERRE 3 PIERRE 4 JACK 1 ALEXANDRE 1 ALEXANDRE 2 可再现数据 structure(list(NAME = structure(c(3L, 3L, 3L, 3L, 2L, 1L, 1L), .Label

我正在尝试创建一个列,该列计算名称的数量,每次不同时都从头开始,如下所示:

NAME          ID
PIERRE         1
PIERRE         2
PIERRE         3
PIERRE         4
JACK           1
ALEXANDRE      1
ALEXANDRE      2
可再现数据

structure(list(NAME = structure(c(3L, 3L, 3L, 3L, 2L, 1L, 1L), .Label = 
c("ALEXANDRE", 
"JACK", "PIERRE"), class = "factor")), class = "data.frame", row.names 
= c(NA, 
-7L))

使用
dplyr
数据。表

df %>%
  group_by(ID_temp = rleid(NAME)) %>%
  mutate(ID = seq_along(ID_temp)) %>%
  ungroup() %>%
  select(-ID_temp)
setDT(df)[, ID := seq_len(.N), by=rleid(NAME)]
或者只是
数据。表

df %>%
  group_by(ID_temp = rleid(NAME)) %>%
  mutate(ID = seq_along(ID_temp)) %>%
  ungroup() %>%
  select(-ID_temp)
setDT(df)[, ID := seq_len(.N), by=rleid(NAME)]

您可以沿每个组中的元素(=名称)构建序列:

或者,如果名称以后可能再次出现,并且仍应算作新组(=名称更改),例如:


groups这里有一个快速的方法

首先,您可以设置数据:


mydata请包含您已经拥有的代码我的代码非常重要,这就是为什么我举了一个简单的例子,我可以使用这个原则。您到底想要什么?@P.Vauclin Mark的意思是显示您迄今为止所尝试的内容,以及一些我们可以复制粘贴并使用的代码。查找dput()函数以帮助完成此操作