首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建稀疏矩阵,然后对数据运行预测分析

创建稀疏矩阵,然后对数据运行预测分析
EN

Stack Overflow用户
提问于 2018-10-21 23:25:15
回答 1查看 212关注 0票数 0

你好,R专家在这里,

我是一个尝试学习R的Stata程序员。我有一个数据框架,其中每个行ID都有值作为df1:

代码语言:javascript
复制
df1 <- data.frame(name=c("John", "Mary", "Joe", "Tim", "Bob", "Pat"),
                  v1=c(14,2,3,4,14,1),
                  v2=c(21,6,19,31,16,5),
                  v3=c(32,10,22,33,27,30),
                  v4=c(42,17,45,39,34,35),
                  v5=c(98,35,66,0,78,99),
                  v6=c(117,49,0,0, 89,186))

每个访问者ID列中的值范围从1到1000。这些基本上是每个访客ID在1000天内去看医生的天数。一些患者在症状消除后停止就诊,一些患者继续服药,并按医生的规定进行常规就诊。如果疾病复发,一些患者会在很长一段时间后再次就诊。

我想创建一个稀疏矩阵,其中包含从1天到1000天内去看医生的所有ID。你能建议一下如何创建一个稀疏矩阵吗?它在Stata中非常简单和直接,但在R中我想不出一种方法。

最终结果应采用以下形式:

代码语言:javascript
复制
name    1   2   3   4   5   6   10  14  16  17  19  21
John                                1               1
Mary        1               1   1           1       
Joe         1                               1

创建稀疏矩阵后,我必须预测患者下一次去看医生的时间。我计划创建一个稀疏矩阵,然后创建最近两次连续访问之间的差值的计算变量,然后对其进行逻辑回归。是否可以生成更多的KPI,以便仅使用给定的信息进行可靠的分析?有没有人能建议一下这个想法是否正确,或者是否有更好的方法来接近它。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-22 00:10:46

关于如何创建稀疏矩阵的问题很容易回答,您提供了一个编码示例。我不认为你需要安装这个包,因为它是任何发行版附带的“推荐”类别的包。

代码语言:javascript
复制
library(Matrix)
help(pac=Matrix)
M <-  Matrix(data.matrix( df1[-1]), sparse=TRUE)  # remove character column first
6 x 6 sparse Matrix of class "dgCMatrix"
     v1 v2 v3 v4 v5  v6
[1,] 14 21 32 42 98 117
[2,]  2  6 10 17 35  49
[3,]  3 19 22 45 66   .
[4,]  4 31 33 39  .   .
[5,] 14 16 27 34 78  89
[6,]  1  5 30 35 99 186

就修订后的问题而言:

代码语言:javascript
复制
# first create index vectors
xix <- c( row(data.matrix(df1[-1]))[!is.na(df1[-1])])
xjy <- c(df1[-1][!is.na(df1[-1])])

然后向索引参数提供非NA值,并提供足够的1来填充索引位置:

代码语言:javascript
复制
 M <- spMatrix(6, 186, i = xix, j=xjy, x=rep(1,length(c( row(data.matrix(df1[-1]))[!is.na(df1[-1])])))) 
> str(M)
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:33] 0 1 2 3 4 5 0 1 2 3 ...
  ..@ j       : int [1:33] 13 1 2 3 13 0 20 5 18 30 ...
  ..@ Dim     : int [1:2] 6 186
  ..@ Dimnames:List of 2
  .. ..$ : NULL
  .. ..$ : NULL
  ..@ x       : num [1:33] 1 1 1 1 1 1 1 1 1 1 ...
  ..@ factors : list()
> M[1:6, 1:25]  # enough output to show success
6 x 25 sparse Matrix of class "dgTMatrix"

[1,] . . . . . . . . . . . . . 1 . . . . . . 1 . . . .
[2,] . 1 . . . 1 . . . 1 . . . . . . 1 . . . . . . . .
[3,] . . 1 . . . . . . . . . . . . . . . 1 . . 1 . . .
[4,] . . . 1 . . . . . . . . . . . . . . . . . . . . .
[5,] . . . . . . . . . . . . . 1 . 1 . . . . . . . . .
[6,] 1 . . . 1 . . . . . . . . . . . . . . . . . . . .
> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52916877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档