我得到了一个data.table dt
,里面有一些特定年龄和年份的人口统计数据。此外,我还区分了几个类别:Cat_1
、Cat_2
和Cat_3
set.seed(1)
Cat_1<-c("A","B")
Cat_2 <- c("u","v")
Year_1 <- c(1991:2000)
Age <- c(46:50)
dt1<-CJ(Cat_1,Cat_2,Year_1,Age)
dt1[,Cat_3 := "x"]
dt1[,value:=runif(dim(dt1)[1],0,1)]
Year_2 <- c(1996:2000)
dt2<-CJ(Cat_1,Cat_2,Year_2,Age)
dt2[,Cat_3 := "y"]
dt2[,value:=runif(dim(dt2)[1],0,1)]
dt <- rbind(dt1,dt2)
colnames(dt) <- c("Cat_1","Cat_2","Year","Age","Cat_3","value")
对于Cat_3
的一些值(这里是y值),我没有所有年份的数据(这里只从1996年开始,而不是1991年)。我现在想添加Cat_1
,Cat_2
,Cat_3
的每个组合,以及所有缺失的年份,并将NA
作为值:
也就是说,在此示例中,将为Cat_3==y
以及Cat_1
、Cat_2
和Age
与value=NA
所有组合创建1991-1995年的附加行。
发布于 2019-06-22 21:44:34
也许:
dt <- dt[
CJ(Cat_3, Cat_1, Cat_2, Year, Age, unique = TRUE),
on = .(Cat_3, Cat_1, Cat_2, Year, Age)
]
dt[Cat_3 == "y",]
的输出
Cat_1 Cat_2 Year Age Cat_3 value
1: A u 1991 46 y NA
2: A u 1991 47 y NA
3: A u 1991 48 y NA
4: A u 1991 49 y NA
5: A u 1991 50 y NA
---
196: B v 2000 46 y 0.68144251
197: B v 2000 47 y 0.09916910
198: B v 2000 48 y 0.11890256
199: B v 2000 49 y 0.05043966
200: B v 2000 50 y 0.92925392
https://stackoverflow.com/questions/56715845
复制相似问题