Определить всякий раз, когда значения повторяются в r

У меня есть такой фрейм данных.

data <- data.frame(Condition = c(1,1,2,3,1,1,2,2,2,3,1,1,2,3,3))

Я хочу заполнить новую переменную Sequence, которая идентифицирует всякий раз, когда Condition снова начинается с 1.

Таким образом, новый фрейм данных будет выглядеть так.

Заранее спасибо за помощь!

data <- data.frame(Condition = c(1,1,2,3,1,1,2,2,2,3,1,1,2,3,3),
                   Sequence = c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3))
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
0
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

база R

data$Sequence2 <- cumsum(c(TRUE, data$Condition[-1] == 1 & data$Condition[-nrow(data)] != 1))
data
#    Condition Sequence Sequence2
# 1          1        1         1
# 2          1        1         1
# 3          2        1         1
# 4          3        1         1
# 5          1        2         2
# 6          1        2         2
# 7          2        2         2
# 8          2        2         2
# 9          2        2         2
# 10         3        2         2
# 11         1        3         3
# 12         1        3         3
# 13         2        3         3
# 14         3        3         3
# 15         3        3         3

dplyr

library(dplyr)
data %>%
  mutate(
    Sequence2 = cumsum(Condition == 1 & lag(Condition != 1, default = TRUE))
  )
#    Condition Sequence Sequence2
# 1          1        1         1
# 2          1        1         1
# 3          2        1         1
# 4          3        1         1
# 5          1        2         2
# 6          1        2         2
# 7          2        2         2
# 8          2        2         2
# 9          2        2         2
# 10         3        2         2
# 11         1        3         3
# 12         1        3         3
# 13         2        3         3
# 14         3        3         3
# 15         3        3         3

Работал отлично! Спасибо. никогда бы не подумал о таком решении

Drew 22.04.2022 21:00

Это заняло некоторое время. Наконец я нахожу это решение:

library(dplyr)
data %>% 
  group_by(Sequnce = cumsum(
    ifelse(Condition==1, lead(Condition)+1, Condition) 
      - Condition==1)
    )
   Condition Sequnce
       <dbl>   <int>
 1         1       1
 2         1       1
 3         2       1
 4         3       1
 5         1       2
 6         1       2
 7         2       2
 8         2       2
 9         2       2
10         3       2
11         1       3
12         1       3
13         2       3
14         3       3
15         3       3

Другие вопросы по теме