если предыдущее значение в одном столбце и следующее значение в другом столбце удовлетворяют условию, добавьте 1 в другой столбец, используя r

avatar
kamran khan
8 августа 2021 в 23:41
27
1
1

У меня есть такие данные

structure(list(id = c(1, 1, 2, 2, 2), time = c(1834, 4809, 18, 
333, 387), nh_source = c(0, 0, 1, 0, 0), admi_source = c(19, 
19, 85, 19, 88), disdest = c(85, 29, 56, 85, 39)), class = "data.frame", row.names = c(NA, 
-5L))

и я хочу сгруппировать идентификаторы и проверить, равно ли предыдущее значение в столбце disdest 56 или 85, а следующее значение в столбце admisorc равно 19, а затем добавить 1 в столбец nh_source столбец. Я хочу, чтобы df выглядел так

structure(list(id2 = c(1, 1, 2, 2, 2), time = c(1834, 4809, 18, 
333, 387), nh_source2 = c(0, 1, 1, 1, 0), admi_source = c(19, 
19, 85, 19, 88), disdest = c(85, 29, 56, 85, 39)), class = "data.frame", row.names = c(NA, 
-5L))
Источник

Ответы (1)

avatar
akrun
8 августа 2021 в 23:43
2

Создайте логическое условие с lag после группировки по 'id' и добавьте его в 'nh_source' (TRUE -> 1 и FALSE -> 0)

library(dplyr)
df1 %>%
     group_by(id) %>% 
     mutate(nh_source = nh_source + 
             (admi_source == 19 & lag(disdest) %in% c(56, 85))) %>%
     ungroup

-выход

# A tibble: 5 x 5
  id time nh_source admi_source disdest
1  1 1834         0          19      85
2  1 4809         1          19      29
3  2   18         1          85      56
4  2  333         1          19      85
5  2  387         0          88      39