我有一个数据框input
,就像下面的格式一样:
queryid wifi rssi
1 0004920b wifi1 10
2 0004920b wifi2 20
3 1114920b wifi3 15
4 11000492 wifi1 -10
我想创建一个稀疏矩阵,使用这个input
数据帧。
例如:
queryid wifi1 wifi2 wifi3
0004920b 10 20 .
1114920b . . 15
11000492 -10 . .
答案 0 :(得分:1)
我最初认为这是Create Sparse Matrix from a data frame的副本,但遇到了与sparseMatrices的赋值索引需要为数字且queryid
和wifi
列似乎相关的要求相关的错误因素(或性格)。我将假设它们是因素,但用户应该检查。
library(Matrix)
(M <- with( dat, sparseMatrix(i= as.numeric(queryid), j=as.numeric(wifi),x=rssi)))
#------
3 x 3 sparse Matrix of class "dgCMatrix"
[1,] 10 20 .
[2,] -10 . .
[3,] . . 15
dimnames(M) <- list( levels(dat$queryid), levels(dat$wifi) )
#-------
> M
3 x 3 sparse Matrix of class "dgCMatrix"
wifi1 wifi2 wifi3
0004920b 10 20 .
11000492 -10 . .
1114920b . . 15
如果这些是字符列,实际上将更难完成。想一想(但不测试),我可能会在为字符列创建因子后使用此代码。
答案 1 :(得分:1)
这是一个简短的版本:
library(tidyverse)
library(Matrix)
df %>%
spread(wifi, rssi, fill = 0) %>%
column_to_rownames("queryid") %>%
as.matrix(.) %>%
Matrix(., sparse =T)
<强>输出:强>
3 x 3 sparse Matrix of class "dgCMatrix"
wifi1 wifi2 wifi3
0004920b 10 20 .
11000492 -10 . .
1114920b . . 15