数据表:在不丢失相关描述因素的情况下添加两个因素缺失组合的行

3

我有一个数据表,其中包含多个因素,例如:

dt <- data.table(station=c(1,1,2,2,3), station.type=c("X","X","Y","Y","Y"), stage=c("A","B","A","B","A"), value=10:14)

   station station.type stage value
1:       1            X     A    10
2:       1            X     B    11
3:       2            Y     A    12
4:       2            Y     B    13
5:       3            Y     A    14

每个站点都与一种类型相关联(我的实际数据有50多个站点和10种类型)。在此示例中,组合站点3 / 阶段B丢失了。我想为缺失的组合添加行,同时保留与该站点相关联的类型。
我从Matt Dowle对这个问题的回答开始: Fastest way to add rows for missing values in a data.frame?
setkey(dt, station, stage)
dt[CJ(station, stage, unique=TRUE)]

   station station.type stage value
1:       1            X     A    10
2:       1            X     B    11
3:       2            Y     A    12
4:       2            Y     B    13
5:       3            Y     A    14
6:       3           NA     B    NA

但是我需要再次与原始数据表进行合并,以填写每个站点的类型。

有没有一种方法可以用一行代码完成所有操作 - 类似于:

dt[CJ(cbind(station, station.type), stage, unique=TRUE)]

当然这是行不通的,因为CJ接受向量作为参数。

5
也许应该使用 dt[, .SD[.(stage=c("A", "B")), on="stage"], by=.(station, station.type)] 进行操作? - Arun
1
жҲ–иҖ…дҪҝз”ЁzooеҢ…дёӯзҡ„na.locfеҮҪж•°пјҡdt[CJ(station, stage, unique=TRUE)][, station.type := na.locf(station.type)] - Jaap
3
@Arun,谢谢你,请将此作为答案发布,这样我就可以接受它了。 - KTWillow
1个回答

4
这里有一种方法:
dt[, .SD[.(stage=c("A", "B")), on="stage"], by=.(station, station.type)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接