Добавить счетчик для Matching ID на основе значения в другом столбце в R - PullRequest
0 голосов
/ 26 октября 2018

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

ID    track
x       10
x       10
x       3
x       3
x       1
y       2

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

ID     Track   Counter
x       10     1
x       10     1
x       3      2
x       3      2
x       1      3
y       2      1

Следовательно, всякий раз, когда идентификатор совпадает, и дорожкаТо же самое положить счетчик в столбце thr Счетчик (начиная с 1), когда идентификатор совпадает, но затем изменения отслеживания делают счетчик +1 и т. д. Когда появляется новый идентификатор, счетчик снова начинается с 1.

Любой совет был бы великолепен.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

@ Юлиус 'ответ работает, если у вас нет повторяющихся треков. Если вы столкнетесь с ситуацией, когда дорожка может вернуться к предыдущему значению, счетчик не будет увеличиваться. Если это относится к вашим данным, и вам нужно увеличить счетчик, когда это произойдет, я бы предложил использовать lag из dplyr.

library(dplyr)
df %>% group_by(ID) %>% mutate(count = cumsum(track != lag(track, default = track[1]))+1)

Результаты с еще парой точек данных:

# A tibble: 8 x 3
# Groups:   ID [2]
#   ID    track count
#   <fct> <int> <dbl>
# 1 x        10     1
# 2 x        10     1
# 3 x         3     2
# 4 x         3     2
# 5 x         1     3
# 6 x         3     4
# 7 x         3     4
# 8 y         2     1
0 голосов
/ 26 октября 2018

Вы можете использовать

library(tidyverse)
data %>% group_by(ID) %>% mutate(Counter = cumsum(!duplicated(track)))

Хитрость заключается в использовании duplicated для обозначения невидимых записей и cumsum в качестве их счетчика.Например,

!duplicated(data$track[1:5])
# [1]  TRUE FALSE  TRUE FALSE  TRUE
...