如何创建每行库存的二进制矩阵?(R)

6 r cluster-analysis sparse-matrix

我有一个9列的数据框,包括一系列因素.每行可以填充所有9列(因为该行中有9个"东西"),但大多数都没有(大多数都在3-4之间).这些列也不是特定的,因为如果项目200显示在第1列和第3列中,则它们是相同的.我想创建一个包含所有因子的每行二进制矩阵.

Ex(缩短到4列只是为了得到指向)

R1 3  4   5   8
R2 4  6   7   NA
R3 1  5  NA   NA
R4 2  6   8   9
Run Code Online (Sandbox Code Playgroud)

应该变成

     1  2  3  4  5  6  7  8  9 
r1   0  0  1  1  1  0  0  1  0
r2   0  0  0  1  0  1  1  0  0
r3   1  0  0  0  1  0  0  0  0
r4   0  1  0  0  0  1  0  1  1
Run Code Online (Sandbox Code Playgroud)

我已经研究过writeBin/readBin,K-clustering(这是我想做的事情,但我需要首先摆脱NAs),模糊聚类,标签聚类.只是有点迷失方向.

我已经尝试编写两个for循环,通过列/行从矩阵中提取数据,然后分别在新矩阵中保存0和1,但我认为存在范围问题.

你们是最棒的.谢谢!

Jos*_*ien 5

这是一个基本的R解决方案:

# Read in the data, and convert to matrix form
df <- read.table(text = "
3  4   5   8
4  6   7   NA
1  5  NA   NA
2  6   8   9", header = FALSE)
m <- as.matrix(df)

# Create a two column matrix containing row/column indices of cells to be filled 
# with 'one's
id <- cbind(rowid = as.vector(t(row(m))), 
            colid = as.vector(t(m)))
id <- id[complete.cases(id), ]

# Create output matrix
out <-  matrix(0, nrow = nrow(m), ncol = max(m, na.rm = TRUE))
out[id] <- 1
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
# [1,]    0    0    1    1    1    0    0    1    0
# [2,]    0    0    0    1    0    1    1    0    0
# [3,]    1    0    0    0    1    0    0    0    0
# [4,]    0    1    0    0    0    1    0    1    1
Run Code Online (Sandbox Code Playgroud)