首页 > 解决方案 > 通过计数行进行索引并在遇到条件时分配相同的索引号。最好使用 dplyr

问题描述

我想按行数索引,但如果满足条件,则应重复索引号。

假设我有以下df

df1 <- data.frame(Segment = c(1, 1, 1, 1, 2, 2, 2, 2),
                  Position = c(3, 24, 56, 725, 4, 4, 4, 45))

如果我使用 df1["length"]<- seq.int(nrow(df1)) 我得到:

Segment Position length
       1        3      1
       1       24      2
       1       56      3
       1      725      4
       2        4      5
       2        4      6
       2        4      7
       2       45      8

我真正想得到的是

Segment Position length
       1        3      1
       1       24      2
       1       56      3
       1      725      4
       2        4      5
       2        4      5
       2        4      5
       2       45      6

seq.int(nrow())我知道按原样使用没有意义,我应该添加一个if但我无法让它工作。

标签: rdplyr

解决方案


您可以计算不同的出现并加入:

library(tidyverse)

df1 <- data.frame(Segment = c(1, 1, 1, 1, 2, 2, 2, 2),
                  Position = c(3, 24, 56, 725, 4, 4, 4, 45))

df1 %>%
  left_join(df1 %>%
              distinct(Position) %>%
              mutate(my_length = row_number()),
            by = "Position")

#Segment Position my_length
#1       1        3         1
#2       1       24         2
#3       1       56         3
#4       1      725         4
#5       2        4         5
#6       2        4         5
#7       2        4         5
#8       2       45         6

推荐阅读