给定此类数据:
df <- data.frame(
ID = 1:10,
Sequ = c(NA, 44,44, NA, NA, 33,33,33, 5,5),
Q = c(NA, "q1","q1", NA, NA, "q2","q2","q2", "q2","q2")
)
我如何更新Sequ
的游程ID才能比这样做更有效:
library(dplyr)
library(data.table)
left_join(df, df %>%
filter(!is.na(Sequ)) %>%
mutate(Sequ_0 = rleid(Sequ))) %>%
select(-Sequ)
ID Q Sequ_0
1 1 <NA> NA
2 2 q1 1
3 3 q1 1
4 4 <NA> NA
5 5 <NA> NA
6 6 q2 2
7 7 q2 2
8 8 q2 2
9 9 q2 3
10 10 q2 3
注意:虽然我使用的是data.table
中的rleid
,但我正在寻找一个tidyverse
解决方案。
5条答案
按热度按时间amrnrhlw1#
还有:
z18hc3ub2#
使用 consecutive_id 获取id,然后排除NA,转换为因子,然后再转换回数值以获得序列号:
ego6inou3#
下面是将
arrange
与consecutive_id
一起使用的另一个选项:webghufk4#
可以选择将
match
与unique
一起使用来创建如下ID:创建于2023年3月9日,使用reprex v2.0.2
p1tboqfb5#
以R为基:
回到基础: