我有这个数据,它基本上是一个矩阵,但采用 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 中做到这一点?非常感谢
我有一个data.table名字dtA:
我的实际dtA有62871932行和3列:
date company value
198101 A 1
198101 A 2
198101 B 5
198102 A 2
198102 B 5
198102 B 6
Run Code Online (Sandbox Code Playgroud)
data.table dtB有一些我想要删除的列dtA,所以dtB就像规则:
实际dtB有19615280行和3列:
date company value
198101 A 2
198102 B 5
Run Code Online (Sandbox Code Playgroud)
最终结果是:
date company value
198101 A 1
198101 B 5
198102 A 2
198102 B 6
Run Code Online (Sandbox Code Playgroud)
它不是那么简单:
dtA=dtA[!(dtB$company %in% dtA$company)]
Run Code Online (Sandbox Code Playgroud)
因为它还取决于日期和价值.
我尝试将两个表合并在一起,并将其链接到不在语句中:
dtA=dtA[dtB, on=date][!(company %in% comapny) & !(value %in% value)]
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
加入超过2 …
我有一个像这样的数据框结构列表:
让我们称这个列表为 listA:
$ :'data.frame': 1 obs. of 3 variables:
..$ a :chr a1
..$ b :chr b1
..$ c :chr c1
$ : NULL
$ :'data.frame': 1 obs. of 3 variables:
..$ a :chr a3
..$ b :chr b3
..$ c :chr c3
Run Code Online (Sandbox Code Playgroud)
如何保留数据的顺序,使用 NA 保持记录为 NULL 并形成这样的数据框?
a b c
1: a1 b1 c1
2: NA NA NA
3: a3 b3 c3
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用:
listA <- data.frame(do.call(rbind, listA))
Run Code Online (Sandbox Code Playgroud)
但最终结果将跳过第二行,变成这样:
a b c
1: a1 b1 c1
2: a3 b3 …Run Code Online (Sandbox Code Playgroud)