如何在 R 中将矩阵转换为 data.table

Gab*_*iel 5 r data.table

我有这个数据,它基本上是一个矩阵,但采用 data.table 格式:

我们称之为 matA:

Date    compA compB compC 
200101      1     2     3 
200102      2     4     1    
Run Code Online (Sandbox Code Playgroud)

如何将矩阵变成data.table中的数据库类型?

我们将此数据集称为 dtB:

Date    Company    Data
200101    compA       1
200101    compB       2
200101    compC       3
200102    compA       2
200102    compB       4
200102    compC       1
Run Code Online (Sandbox Code Playgroud)

我想到了一个非常愚蠢的方法来列出公司列表:

comp= as.data.table(c("compA", "compB", "compC"))
date= as.data.table(rep(matA[1,1],3))
data= as.data.table(matA[1,])

dtb= date[,Company := comp]
dtb= dtb[, Data := data]
Run Code Online (Sandbox Code Playgroud)

显然我最多只能获取日期 200101 中的数据。为了获取 200102,我编写了一个 for 循环。然后,根据colnames将200101和200102合并到dtB中。

有没有一种聪明的方法可以在 data.table 中做到这一点?非常感谢

C8H*_*4O2 3

如果您已经有一个真正的矩阵,如下所示:

matA <- 
  as.matrix(
    read.table(text=
      "Date    compA compB compC 
      200101      1     2     3 
      200102      2     4     1",
      header=TRUE,
      row.names=1)
  )
names(dimnames(matA)) <- c('Date','Company')
matA
#        Company
#  Date   compA compB compC
#  200101     1     2     3
#  200102     2     4     1
Run Code Online (Sandbox Code Playgroud)

...然后你就可以使用底座了as.data.frame( as.table(x) )

as.data.frame(
  as.table(matA),
  responseName = 'Data'
)

#     Date Company Data
# 1 200101   compA    1
# 2 200102   compA    2
# 3 200101   compB    2
# 4 200102   compB    4
# 5 200101   compC    3
# 6 200102   compC    1
Run Code Online (Sandbox Code Playgroud)

无需依赖。

这利用了as.data.frame()类的方法table

as.data.frame从类继承的对象的方法可"table"用于将列联表的基于数组的表示转换为包含分类因子和相应条目(后者作为由 命名的组件responseName)的数据框。这是 的逆xtabs

当然,如果你愿意,你可以这样做as.data.table( as.table(x) ),或者做一个melt