基于以下数据:
library(tidyverse)
limit <- c(7, 7, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5)
group <- c("a", "a", "a", "a", "a", "a", "a", "a", "a","b", "b", "b", "b", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "c", "c", "c", "c")
df <- data.frame(limit, group)
df
我想如下创建一个新列(NewCol):
[如果存在限制= Id的行,则在NewCol上应为0。但是然后,我希望0之前的所有行以相反的顺序返回到组的第一行,而0以后的所有行都被计数到组的末尾。
例如,在这种情况下,对于组“ a”,它应该看起来像]
-6,-5,-4,-3,-2,-1、0、1、2,其中-6是该组的第一行,而2是该组的第9行。
这是我尝试过的,但仍然没有得到我需要的东西
df %>% group_by(group) %>% mutate(Id = seq(1:length(limit))) %>%
mutate(NewCol = ifelse(limit == Id, 0, NA)) %>%
mutate(nn=ifelse(is.na(NewCol),
zoo::na.locf(NewCol) + cumsum(is.na(NewCol))*1,
NewCol))
谢谢
只是按分组后的row_number()
和'limit'之间的差异>
library(dplyr)
df %>%
group_by(group) %>%
mutate(NewCol = row_number() - limit)