Создать двоичную матрицу из данных вхождений в R

Я пытаюсь создать бинарную матрицу встречаемости для нескольких людей во временном ряду случаев опроса. Исходные данные - это фрейм данных, который содержит отдельное поле идентификатора и поле номера случая, соответствующее положительному вхождению для этого человека. Мне нужно сохранить индивидуальный идентификатор в выходной матрице. Обратите внимание, что лица, которые имели положительные вхождения несколько раз, встречаются в исходном наборе данных>1 раз. Я пытался адаптировать код из предыдущего поста, но не могу заставить его работать.

Вот фрагмент примера исходных данных и желаемой матрицы:

ИСТОЧНИК:

ID1   1
ID1   3
ID1   7
ID2   4
ID3   2
ID3   6
ID4   8

ВЫХОД:

ID1   10100010
ID2   00010000
ID3   01000100
ID4   00000001

1 ответ

Я назвал ваши данные:

names(dat) <- c("id", "num")

Чтобы разобраться в этом, я сделал быструю функцию, которая делает вектор длиной 8 и заполняет соответствующие места единицами.

rep8 <- function(x){
  zeroes <- rep(0, 8)
  zeroes[x] <- 1
  zeroes
}

Затем примените эту функцию к каждому идентификатору и rbind их в матрицу

do.call(rbind, tapply(dat$num, dat$id, rep8))

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
ID1    1    0    1    0    0    0    1    0
ID2    0    0    0    1    0    0    0    0
ID3    0    1    0    0    0    1    0    0
ID4    0    0    0    0    0    0    0    1
Другие вопросы по тегам