Преобразование категориального вектора атрибута в матрицу подобия

Мне нужно преобразовать категориальный вектор атрибутов в «ту же матрицу атрибутов» с помощью R.

Например, у меня есть вектор, который сообщает пол N человек (мужчина = 1, женщина = 0). Мне нужно преобразовать этот вектор в матрицу NxN с именем A (с именами людей в строках и столбцах), где каждая ячейка Aij имеет значение 1, если два человека (i и j) имеют одинаковый пол, и 0 в противном случае.

Вот пример с 3 людьми, первый мужчина, вторая женщина, третий мужчина, которые производят этот вектор:

c(1, 0, 1) 

Я хочу преобразовать его в эту матрицу:

A = matrix( c(1, 0, 1, 0, 1, 0, 1, 0, 1), nrow=3, ncol=3, byrow = TRUE) 

person Forinstance    schedule 25.10.2017    source источник


Ответы (1)


Как сказал lmo в комментариях, невозможно узнать структуру вашего набора данных, поэтому то, что следует ниже, является лишь примером для вас, чтобы увидеть, как это можно сделать.
Во-первых, составьте некоторые данные.

set.seed(3488)    # make the results reproducible
x <- LETTERS[1:5]
y <- sample(0:1, 5, TRUE)
df <- data.frame(x, y)

Теперь составьте таблицу в соответствии с вашими потребностями.

A <- outer(df$y, df$y, function(a, b) as.integer(a == b))
dimnames(A) <- list(df$x, df$x)
A
#  A B C D E
#A 1 1 1 0 0
#B 1 1 1 0 0
#C 1 1 1 0 0
#D 0 0 0 1 1
#E 0 0 0 1 1
person Rui Barradas    schedule 25.10.2017
comment
альтернативный .._ 1_ - person user20650; 25.10.2017
comment
Немного короче, но труднее читать / интерпретировать: +outer(tmp, tmp, "=="). - person lmo; 25.10.2017