Я в среднем на R, и мне нужна помощь со следующей операцией.
Допустим, у меня есть следующий фрейм данных:
>df
ID Label
P1 M
P1 S
P2 M
P2 M
P2 S
P3 M
P3 S
P3 M
P4 S
P4 M
P5 M
P5 M
P5 S
Я хочу иметь возможностьвыберите строки, которые встречаются в определенной последовательности переменной Label
относительно каждого идентификатора.
Для шаблона "MS"
ожидаемый результат будет
ID Label
P1 M
P1 S
P2 M
P2 S
P3 M
P3 S
и дляшаблон "MMS"
, ожидаемый результат будет
ID Label
P2 M
P2 M
P2 S
P5 M
P5 M
P5 S
, а для шаблона "SM"
ожидаемый результат:
ID Label
P3 S
P3 M
P4 S
P4 M
Пожалуйста, примите во внимание тот факт, что данные, с которыми я работаюУ on есть много строк, и решение, которое мне нужно построить, должно работать для шаблонов произвольной длины.(напр. "MSS", "SM", "MMSSMS" и т. д.).Я скромно прошу вашей помощи.
Редактировать: я обновил этот вопрос (пример кадра данных и пример вывода шаблона "MMS"
. Я хочу добавить, что я хочу, чтобы сопоставление с шаблоном происходило после группировки данныхиспользуя переменную ID
, чтобы шаблоны можно было найти в группах данных, сгруппированных по ID
. Извините, что не удалось очистить в первый раз.
Окончательное редактирование: ответы от @akrun, @boski и @У меня работают tmfmnk. Решения @ boski и @ akrun были быстрее по времени выполнения (~ 2-10 секунд на 400k строк данных) по сравнению с решением @ tmfmnk (~ 29 секунд на 400k строк данных). Я советую читателю:см. все три из этих решений.