r - 通过计数行进行索引并在遇到条件时分配相同的索引号。最好使用 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但我无法让它工作。
解决方案
您可以计算不同的出现并加入:
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