Так что, если вы хотите преобразовать свой data.frame в data.table, эту проблему можно решить довольно эффективно и аккуратно, и если у вас будет много строк, это будет намного быстрее.
library(data.table)
dat<-data.table(dat)
В основном выМожно применять функции к столбцам таблицы data.table в ячейке j и группировать в ячейке k.Таким образом, вы хотите, чтобы все комбинации категорий были взяты по две одновременно для каждого идентификатора, который выглядит следующим образом:
dat[,combn(Categories,2),by=ID]
Однако остановка в этой точке сохранит столбец идентификатора и по умолчанию создаст столбец с именем V1, который в основномобъединяет массив, возвращаемый combn, в вектор категорий, а не в необходимую вам матрицу смежности из двух столбцов.Но, приковав к нему еще один вызов, вы можете легко создать матрицу, как если бы вы использовали любой отдельный вектор.В одной строке кода это будет выглядеть так:
dat[,combn(Category,2),by=ID][,matrix(V1,ncol=2,byrow = T)]
Помните, что векторный столбец, который мы хотим преобразовать в матрицу, по умолчанию называется V1, а также мы хотим, чтобы матрица из 2 столбцов создавалась по строкевместо значения по умолчанию, которое по столбцу.Надеюсь, что это поможет, и дайте мне знать, если мне нужно что-то добавить к моему объяснению.Удачи!