Я хотел бы назначить уникальные идентификаторы для строк таблицы данных для нескольких значений столбца.Давайте рассмотрим простой пример:
library(data.table)
DT = data.table(a=c(4,2,NA,2,NA), b=c("a","b","c","b","c"), c=1:5)
a b c
1: 4 a 1
2: 2 b 2
3: NA c 3
4: 2 b 4
5: NA c 5
Я хотел бы сгенерировать идентификаторы на основе столбцов a и b и ожидать получить три идентификатора, где идентификаторы 2-й и 4-й строк идентичны, а 3-й и 5-й ряды одинаковыИД.
Я видел два решения, но каждое из них несколько неполное:
1) Решение 1 требует таблицы отсортированных данных, что очень громоздко, если нам нужно генерировать идентификаторы для многих столбцов (вВ моем реальном приложении идентификаторы создаются на основе примерно десяти столбцов).Можем ли мы заменить функцию cumsum, чтобы сортировка не требовалась?
DT$ID1 <- cumsum(!duplicated(DT[,1:2]))
2) Решение два игнорирует значения NA;хотя я хотел бы включить NA и назначить им идентификатор группы
DT <- transform(DT, ID2 = as.numeric(interaction(a,b, drop=TRUE)))
Я ценю любое предложение о том, как изменить любое из решений для генерации Expected_ID, показанное ниже.
a b c ID1 ID2 Expected_ID
1: 4 a 1 1 1 1
2: 2 b 2 2 2 2
3: NA c 3 3 NA 3
4: 2 b 4 3 2 2
5: NA c 5 3 NA 3