У меня есть матрица с 3 столбцами: первый столбец содержит Year
, второй столбец содержит имя Country 1
, а третий столбец содержит имя Country 2
. Например,
> mat <- cbind(c(1900,1900,1900,1901,1901,1901),
+ c("USA","USA","FRANCE","USA","USA", "FRANCE") ,
+ c("FRANCE", "GERMANY", "GERMANY","FRANCE", "GERMANY", "GERMANY") )
> mat
[,1] [,2] [,3]
[1,] "1900" "USA" "FRANCE"
[2,] "1900" "USA" "GERMANY"
[3,] "1900" "FRANCE" "GERMANY"
[4,] "1901" "USA" "FRANCE"
[5,] "1901" "USA" "GERMANY"
[6,] "1901" "FRANCE" "GERMANY"
Я хочу создать метку для каждой комбинации. Например, я хотел бы получить вектор label = c(1,2,3,1,2,3)
, обозначающий различные комбинации. Я знаю, как это сделать грубой силой. Это означает создание списка уникальных комбинаций названий стран с пакетом, а затем сравнение каждой из этих комбинаций с каждой строкой mat
и создание вектора label
в цикле с помощью команды identical()
.
library(RcppAlgos)
cs <- as.character(unique(c(mat[,2],mat[,3])))
combos <- comboGeneral(cs, 2 , FALSE)
Однако моя матрица содержит 1000 000 строк и пару тысяч комбинаций названий стран, что делает этот процесс очень медленным.
ВОПРОС : есть ли более эффективный способсоздания вектора label
, указывающего уникальные комбинации второй и третьей строк матрицы mat
?