Создать двоичную матрицу из данных вхождений в 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