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,但我认为存在范围问题.
你们是最棒的.谢谢!
这是一个基本的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)
| 归档时间: |
|
| 查看次数: |
4512 次 |
| 最近记录: |