你好,R专家在这里,
我是一个尝试学习R的Stata程序员。我有一个数据框架,其中每个行ID都有值作为df1:
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中我想不出一种方法。
最终结果应采用以下形式:
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,以便仅使用给定的信息进行可靠的分析?有没有人能建议一下这个想法是否正确,或者是否有更好的方法来接近它。
提前谢谢。
发布于 2018-10-22 00:10:46
关于如何创建稀疏矩阵的问题很容易回答,您提供了一个编码示例。我不认为你需要安装这个包,因为它是任何发行版附带的“推荐”类别的包。
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就修订后的问题而言:
# 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来填充索引位置:
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 . . . . . . . . . . . . . . . . . . . .
> https://stackoverflow.com/questions/52916877
复制相似问题