我有这个数据,它基本上是一个矩阵,但采用 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 中做到这一点?非常感谢
如果您已经有一个真正的矩阵,如下所示:
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。
| 归档时间: |
|
| 查看次数: |
7111 次 |
| 最近记录: |