首页 > 解决方案 > R - 有没有办法在重复即将进行的观察后生成从 1 开始的行号?

问题描述

在此处输入图像描述标题绝对不足以理解我的问题。简而言之,这是我的数据:

|ID | group | 
|---|-------|
| 1 | Banana| 
| 2 | Apple | 
| 3 | Apple | 
| 4 | Apple | 
| 5 | Banana| 
| 6 | Banana| 
| 7 | Apple | 
| 8 | Apple | 

现在我想创建一个按组编号的变量,但是在新的观察后它不应该再次从 1 开始。所以基本上它看起来像这样:

|ID | group | row_number |
|---|-------|------------|
| 1 | Banana| 1          |
| 2 | Apple | 1          |
| 3 | Apple | 2          |
| 4 | Apple | 3          | 
| 5 | Banana| 2          |
| 6 | Banana| 3          | 
| 7 | Apple | 4          |
| 8 | Apple | 5          |

什么时候应该是这样的:

|ID | group | row_number |
|---|-------|------------|
| 1 | Banana| 1          |
| 2 | Apple | 1          |
| 3 | Apple | 2          |
| 4 | Apple | 3          | 
| 5 | Banana| 1          |
| 6 | Banana| 2          | 
| 7 | Apple | 1          |
| 8 | Apple | 2          |

不得不提的是,我有很多观察,而不仅仅是 Apple 和 Banana 这两组。因此,不幸的是,我必须将组命名为“Apple”和“Banana”的代码没有帮助。我试图解决这样的问题:

df1<- df1%>%   
  group_by(group) %>%
  mutate(numbering = row_number())

但是这里的错误是显而易见的。我也试图解决这个问题,但这非常困难。如果有人有解决方案,我将非常感激!

标签: rgroup-byrow-number

解决方案


另一种方式:

df %>% 
  mutate(Temp=data.table::rleid(group)) %>% 
  group_by(Temp) %>% 
  mutate(row_number=row_number()) %>%
  select(-Temp)

推荐阅读