我在R中有一个data.table,它是从一个如下所示的数据库中获取的:
date,identifier,description,location,value1,value2
2014-03-01,1,foo,1,100,200
2014-03-01,1,foo,2,200,300
2014-04-01,1,foo,1,100,200
2014-04-01,1,foo,2,100,200
2014-05-01,1,foo,1,100,200
2014-05-01,1,foo,2,100,200
2014-03-01,2,bar,1,100,200
2014-04-01,2,bar,1,100,200
2014-05-01,2,bar,1,100,200
2014-03-01,3,baz,1,100,200
2014-03-01,3,baz,2,200,300
2014-04-01,3,baz,1,100,200
2014-04-01,3,baz,2,100,200
2014-05-01,3,baz,1,100,200
2014-05-01,3,baz,2,100,200
2014-05-01,4,quux,2,100,200
<SNIP>
Run Code Online (Sandbox Code Playgroud)
为了对数据进行一些计算,我想按摩它,以便日期,标识符,描述和位置的每个组合在表中有一行,其中NA为value1和value2.我知道日期的范围和所有可能的位置值.
我是R和data.table的新手,我的思绪在这一点上很难.我想为上面的示例表提出的结果是:
date,identifier,description,location,value1,value2
2014-03-01,1,foo,1,100,200
2014-03-01,1,foo,2,200,300
2014-04-01,1,foo,1,100,200
2014-04-01,1,foo,2,100,200
2014-05-01,1,foo,1,100,200
2014-05-01,1,foo,2,100,200
2014-03-01,2,bar,1,100,200
2014-03-01,2,bar,2,NA,NA
2014-04-01,2,bar,1,100,200
2014-04-01,2,bar,2,NA,NA
2014-05-01,2,bar,1,100,200
2014-05-01,2,bar,2,NA,NA
2014-03-01,3,baz,1,100,200
2014-03-01,3,baz,2,200,300
2014-04-01,3,baz,1,100,200
2014-04-01,3,baz,2,100,200
2014-05-01,3,baz,1,100,200
2014-05-01,3,baz,2,100,200
2014-03-01,4,quux,1,NA,NA
2014-03-01,4,quux,2,NA,NA
2014-04-01,4,quux,1,NA,NA
2014-04-01,4,quux,2,NA,NA
2014-05-01,4,quux,1,NA,NA
2014-05-01,4,quux,2,100,200
Run Code Online (Sandbox Code Playgroud)
数据库中的数据是稀疏的,因为给定的标识符/描述/位置组合可以具有任何数量的条目或者对于每个日期根本没有条目.我想达到给定的日期范围(例如,2014-03-01到2014-05-01),每个标识符/描述和位置在表中都有一行.
这似乎是一个有趣的数据.可行的技巧,但我在消隐.
编辑:我通过合并另一个数据表以较小的比例为一个标识符/描述做了这个,但我不知道如何通过增加多个标识符/描述和位置的复杂性来做到这一点.
非常感谢您的回复.
这是原始数据的输出输出,可以很容易地复制到R中:
structure(list(date = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 3L),
.Label = c("2014-03-01", "2014-04-01", "2014-05-01"), class = "factor"),
identifier = c(1L, …Run Code Online (Sandbox Code Playgroud)