查找值为零的行,并在其前后添加行数

问题描述 投票:0回答:2

基于以下数据:

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))

谢谢

r dplyr rstudio tidyverse rowcount
2个回答
1
投票

只是按分组后的row_number()和'limit'之间的差异>

library(dplyr)
df %>% 
    group_by(group) %>%
    mutate(NewCol = row_number() - limit)
© www.soinside.com 2019 - 2024. All rights reserved.