Nano Hash - криптовалюты, майнинг, программирование

Создайте уникальный идентификатор для разных групп строк

Я хочу пронумеровать определенные комбинации строк в кадре данных (который упорядочен по идентификатору и по времени)

tc <- textConnection('
id              time       end_yn   number
abc             10         0        1
abc             11         0        2
abc             12         1        3 
abc             13         0        1 
def             10         0        1
def             15         1        2
def             16         0        1
def             17         0        2
def             18         1        3
')

test <- read.table(tc, header=TRUE)

Цель состоит в том, чтобы создать новый столбец ("journey_nr"), в котором каждой строке присваивается уникальный номер в зависимости от пути, к которому она принадлежит. Поездки определяются как последовательность строк от id до end_yn == 1, также, если end_ynникогда не становится 1, поездка также должна быть пронумерована (см. пример ожидаемого результата). Возможно только end_yn == 0 поездок в конце набора строк для идентификатора (как показано в строке 4 для идентификатора 3). Таким образом, либо end_yn == 1 для этого идентификатора не произошло, либо это произошло до end_yn == 0-путешествия (см. id == abc в примере).

Я умею нумеровать с помощью пакета data.table, но не знаю, какие столбцы объединить, чтобы получить ожидаемый результат. Я искал тег data.table на SO, но не смог найти подобную проблему.

Ожидаемый результат:

id              time       end_yn   number    journey_nr
abc             10         0        1         1
abc             11         0        2         1
abc             12         1        3         1
abc             13         0        1         2
def             10         0        1         3
def             15         1        2         3
def             16         0        1         4
def             17         0        2         4
def             18         1        3         4
05.11.2012

  • Здесь есть хорошая идея . 05.11.2012

Ответы:


1

Другой базовый ответ R:

test$journey <- cumsum(c(1,head(test$number,-1)) >= test$number)

Результат:

> test
   id time end_yn number journey
1 abc   10      0      1       1
2 abc   11      0      2       1
3 abc   12      1      3       1
4 abc   13      0      1       2
5 def   10      0      1       3
6 def   15      1      2       3
7 def   16      0      1       4
8 def   17      0      2       4
9 def   18      1      3       4
05.11.2012
  • Хорошо подмечено! Я не обратил внимания на поле number. 06.11.2012

  • 2

    Попробуй это:

    tc$journey <- cumsum(as.numeric(c(0, head(tc$end_yn, -1)) | c(0, diff(as.numeric(tc$id))))) + 1
    
    tc
    #    id time end_yn number journey
    # 1 abc   10      0      1       1
    # 2 abc   11      0      2       1
    # 3 abc   12      1      3       1
    # 4 abc   13      0      1       2
    # 5 def   10      0      1       3
    # 6 def   15      1      2       3
    # 7 def   16      0      1       4
    # 8 def   17      0      2       4
    # 9 def   18      1      3       4
    
    05.11.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..