Подмножество data.table для представления соединений объектов - PullRequest
1 голос
/ 24 января 2020

Дан data.table, представляющий отношения между 6 объектами:

# create sampla data.table
x1 <- c(1,1,1,2,2,2,3,3,3,4,5,6)
x2 <- c(1,2,3,1,2,3,1,2,3,4,6,5)
dt <- data.table(x1, x2)

1-я строка представляет объекты. 2-й ряд представляет связь с другими объектами.

# check combinations
dt[dt$x1 != dt$x2]

Объект 4 не имеет связей с другими объектами. Объекты 1, 2 и 3 связаны между собой, а также объекты 5 и 6.

Теперь необходимо создать новый столбец, в котором все подключенные объекты получают одинаковый номер (ID)

. data.table должен выглядеть так:

x3 <- c(1,1,1,1,1,1,1,1,1,2,3,3)
dt.res <- data.table(dt, x3)

Как этого достичь?

1 Ответ

0 голосов
/ 24 января 2020
x1 <- c(1,1,1,2,2,2,3,3,3,4,5,6)
x2 <- c(1,2,3,1,2,3,1,2,3,4,6,5)
dt <- data.frame(x1, x2)

dt$x3=dt$x1
dt
for(i in 1:nrow(dt)){
  if(dt$x3[i]!=dt$x2[i]){
    dt$x3[dt$x3==dt$x2[i]]=dt$x3[i]
  }
}
setDT(dt)[, id := .GRP, by=x3]
dt
  1. Создание дубликата x1, x3
  2. Итерация по x3, проверка, если отличается от x2
  3. Если отличается, заменяет все элементы в x3, которые равны элементу что вы только что зарегистрировались в x2 с текущим значением x3
  4. Назначьте идентификаторы с помощью функции setDT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...