我试图在调查场合的时间序列中为多个个体创建一个二进制发生矩阵。源数据是一个数据框,其中包含一个个人ID字段和一个场合号字段,对应于该个人的积极事件。我需要在输出矩阵中保留单个ID。请注意,在多个场合出现阳性的个体在源数据集中出现的次数大于1次。我试着从以前的帖子改编代码,但我不能让它工作。
下面是示例源数据和所需矩阵的一个片段:
源:ID1 1
ID1 3
ID1 7
ID2 4
ID3 2
ID3 6
ID4 8
输出:ID1 10100010
ID2 00010000
ID3 01000100
ID4 00000001
我已经给了你的数据名称:
names(dat) <- c("id", "num")
为了解决这个问题,我编写了一个快速函数,它生成一个长度为8的向量,并用1填充相应的位置。
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