我正在尝试在一系列调查时间段内为多个人创建二进制出现矩阵。源数据是包含个体ID字段和对应于该个体的正发生的个体ID字段的数据帧。我需要在输出矩阵中保留单个ID。请注意,多次出现阳性的个体在源数据集中出现> 1次。我尝试调整previous post中的代码,但我无法使其工作。
以下是示例源数据和所需矩阵的片段:
来源:
ID1 1
ID1 3
ID1 7
ID2 4
ID3 2
ID3 6
ID4 8
输出:
ID1 10100010
ID2 00010000
ID3 01000100
ID4 00000001
答案 0 :(得分:1)
我已经提供了您的数据名称:
names(dat) <- c("id", "num")
为了解决这个问题,我做了一个快速的函数,它生成一个长度为8的向量,并用一个填充适当的点。
rep8 <- function(x){
zeroes <- rep(0, 8)
zeroes[x] <- 1
zeroes
}
然后将此函数应用于每个id,将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