【问题标题】:Matrix extracted from list keep list data type从列表中提取的矩阵保持列表数据类型
【发布时间】:2019-12-17 15:26:06
【问题描述】:

我有一个仅由一个矩阵组成的列表:

$`1`
                   Buy  C-Level_3RDLIVE   C-Level_3RDWP   C-Level_AR   C-Level_ARCHWEB   C-Level_ASKOD   C-Level_CR 
 Buy                 0         0.1818182       0.0000000            0                 0               0            0
 C-Level_3RDLIVE     0         0.0000000       0.0000000            0                 0               0            0
 C-Level_3RDWP       0         0.0000000       0.1111111            1                 0               0            0
 C-Level_AR          0         0.0000000       0.0000000            0                 0               0            0
 C-Level_ARCHWEB     0         0.0000000       0.0000000            0                 0               0            1

它来源于“clickstream”包的“fitMarkovchain”函数的矩阵:

#fit the model
mc <- fitMarkovChain(clickstreamList = cls, order = 1,
                     control = list(optimizer = "quadratic"))
mc

#extract list of matrix
tr<-mc@transitions

我的目标是对上述矩阵进行垂直重构,将行/标签名称和概率分别放在单独的列中。我尝试了以下方法:

tr<-tr[[1]]
rwn<-rownames(tr)
as.data.frame(t(as.matrix((tr))))

但似乎 tr 对象保留了列表数据类型,尽管进行了 as.matrix 转换。

想要的输出是:

x1   x2                  %
Buy Buy                  0
Buy C-level_3Rdlive      0.1818182
..  ..                   ..

关于如何删除列表类型并垂直重塑矩阵的任何提示?

但是tr对象是

【问题讨论】:

  • 为什么在transposing 之前需要as.matrix 部分?另外,至少使用iris,结果似乎不是一个列表。它是一个data.frame 对象。 t 可能不是您需要的功能?
  • 类型归类为list: > typeof(tr) [1] "list" 。它是“clickstream”包的“fitMarkovChain”函数的结果

标签: r matrix reshape2


【解决方案1】:

如果已经是矩阵,则可以直接使用t()进行转置。我不确定以下内容是否是您想要的

t(tr)

这样

> t(tr)
                      Buy C-Level_3RDLIVE C-Level_3RDWP C-Level_AR C-Level_ARCHWEB
Buy             0.0000000               0     0.0000000          0               0
C-Level_3RDLIVE 0.1818182               0     0.0000000          0               0
C-Level_3RDWP   0.0000000               0     0.1111111          0               0
C-Level_AR      0.0000000               0     1.0000000          0               0
C-Level_ARCHWEB 0.0000000               0     0.0000000          0               0
C-Level_ASKOD   0.0000000               0     0.0000000          0               0
C-Level_CR      0.0000000               0     0.0000000          0               1

数据

tr <- structure(c(0, 0, 0, 0, 0, 0.1818182, 0, 0, 0, 0, 0, 0, 0.1111111, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
1), .Dim = c(5L, 7L), .Dimnames = list(c("Buy", "C-Level_3RDLIVE", 
"C-Level_3RDWP", "C-Level_AR", "C-Level_ARCHWEB"), c("Buy", "C-Level_3RDLIVE", 
"C-Level_3RDWP", "C-Level_AR", "C-Level_ARCHWEB", "C-Level_ASKOD", 
"C-Level_CR")))

这是重塑表格的代码

X <- data.frame(rev(expand.grid(rownames(tr),colnames(tr))),val = as.vector(t(tr)))

这样

> X
              Var2            Var1              val
1              Buy             Buy        0.0000000
2              Buy C-Level_3RDLIVE        0.1818182
3              Buy   C-Level_3RDWP        0.0000000
4              Buy      C-Level_AR        0.0000000
5              Buy C-Level_ARCHWEB        0.0000000
6  C-Level_3RDLIVE             Buy        0.0000000
7  C-Level_3RDLIVE C-Level_3RDLIVE        0.0000000
8  C-Level_3RDLIVE   C-Level_3RDWP        0.0000000
9  C-Level_3RDLIVE      C-Level_AR        0.0000000
10 C-Level_3RDLIVE C-Level_ARCHWEB        0.0000000
11   C-Level_3RDWP             Buy        0.0000000
12   C-Level_3RDWP C-Level_3RDLIVE        0.0000000
13   C-Level_3RDWP   C-Level_3RDWP        0.0000000
14   C-Level_3RDWP      C-Level_AR        0.0000000
15   C-Level_3RDWP C-Level_ARCHWEB        0.0000000
16      C-Level_AR             Buy        0.0000000
17      C-Level_AR C-Level_3RDLIVE        0.1111111
18      C-Level_AR   C-Level_3RDWP        1.0000000
19      C-Level_AR      C-Level_AR        0.0000000
20      C-Level_AR C-Level_ARCHWEB        0.0000000
21 C-Level_ARCHWEB             Buy        0.0000000
22 C-Level_ARCHWEB C-Level_3RDLIVE        0.0000000
23 C-Level_ARCHWEB   C-Level_3RDWP        0.0000000
24 C-Level_ARCHWEB      C-Level_AR        0.0000000
25 C-Level_ARCHWEB C-Level_ARCHWEB        0.0000000
26   C-Level_ASKOD             Buy        0.0000000
27   C-Level_ASKOD C-Level_3RDLIVE        0.0000000
28   C-Level_ASKOD   C-Level_3RDWP        0.0000000
29   C-Level_ASKOD      C-Level_AR        0.0000000
30   C-Level_ASKOD C-Level_ARCHWEB        0.0000000
31      C-Level_CR             Buy        0.0000000
32      C-Level_CR C-Level_3RDLIVE        0.0000000
33      C-Level_CR   C-Level_3RDWP        0.0000000
34      C-Level_CR      C-Level_AR        0.0000000
35      C-Level_CR C-Level_ARCHWEB        1.0000000

【讨论】:

  • 似乎从列表中提取时,尽管是矩阵,但矩阵仍保留“列表”类型
  • @davidecortellino 你说的the Matrix keep the "list" type despite being a Matrix是什么意思?
  • 我的意思是在包描述中“transition”对象被声明为矩阵。但是,当从结果列表中提取对象并分配给“tr”对象时,typeof(tr) 函数返回“list”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多