создать новую переменную, используя определенные наборы последовательных значений в другом столбце - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь создать новую переменную, в которой значения присваиваются в зависимости от определенного набора последовательных значений в другом столбце.ниже примера, сообщающего о статусе (положительном или отрицательном) 10 тестов:

    df<-data.frame(Trank=c(1:10), status=c(0,1,0,0,1,1,0,1,0,1))

теперь значения в новом столбце «класс» должны назначаться в соответствии с некоторыми правилами, такими как: class = "a" ifтекущий тест отрицательный, но предыдущие два теста были положительными и class == "b", если текущий тест положительный, но предыдущий был отрицательным, в противном случае class == "c".В этом примере я получу что-то вроде:

Trank status class
  1      0     c
  2      1     b
  3      0     c
  4      0     c
  5      1     b
  6      1     c
  7      0     a
  8      1     b
  9      0     c
 10      1     b

и не могу понять, какой должна быть условная функция для получения этого вывода.Я прошу прощения за то, что не опубликовал ни одной попытки, но я действительно застрял с этим.Любой совет / предложение будет очень ценным!Большое спасибо!

1 Ответ

0 голосов
/ 12 июня 2018

Мы можем использовать dplyr::lag с dplyr::case_when для кодирования различных условий

library(tidyverse)
df %>%
    mutate(class = case_when(
        status == 0 & lag(status) == 1 & lag(status, n = 2L) == 1 ~ "a",
        status == 1 & lag(status) == 0 ~ "b",
        TRUE ~ "c"))
#   Trank status class
#1      1      0     c
#2      2      1     b
#3      3      0     c
#4      4      0     c
#5      5      1     b
#6      6      1     c
#7      7      0     a
#8      8      1     b
#9      9      0     c
#10    10      1     b
...