1

我正在尝试为跨时间序列的调查场合的多个人创建一个二元出现矩阵。源数据是一个数据帧,其中包含一个个人 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
4

1 回答 1

1

我给了你的数据名称:

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
于 2013-04-09T13:58:17.703 回答