根据R中的出现数据创建二进制矩阵

时间:2013-04-09 13:29:26

标签: r statistics binary-data

我正在尝试在一系列调查时间段内为多个人创建二进制出现矩阵。源数据是包含个体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

1 个答案:

答案 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