繁体   English   中英

子集数据表以用最新的非 NA 值替换 NA

[英]subset datatable to replace NAs with latest non-NA value

我正在尝试在这里使用解决方案: Replaceing NAs with latest non-NA value

到一个大数据表,但无法解决。

我的数据表子childs位于此处的链接。 我想创建一个pop列,当缺少value时从pop1中获取值。 棘手的一点是通过正确的组,我无法通过。

如果我先进行子集化:

child_sub<- childs[ sector_number=='3.B.2.1.1' & meastype== 'NRATE']

接着

childs1 <- child_sub[, pop1:=pop[1], .( cumsum(!is.na(value)) )]

它有效,因为它为 2019 年的pop1提供了 2018 年的pop值,即 1591.251。 但是,如果我尝试:

childs1 <- childs[, pop1:=pop[1], .( party, sector_number, meastype, cumsum(.is.na(value)) )] ,它没有分配正确的pop (即来自相同meastypepop ,前一年),我不明白为什么......

我也尝试过:

childs1 <- childs[is.na(value), pop1:=setnafill(pop, type = "locf")]

这会立即引发错误。

任何帮助表示赞赏

我发布解决方案以防将来有人会阅读此内容。 我意识到这里提出的解决方案Replacing NAs with latest non-NA value ,并且我想复制,当有两个连续的 NA 值时不起作用。 在这种情况下,没有pop[1]并返回零。 解决方案是在childs[, pop1:=pop[1], .( sector_number, meastype, cumsum(.is.na(value)) )]行之前排序:

setkey(childs, sector_number, meastype)
childs[, pop1:=pop[1], .(sector_number, meastype, cumsum(!is.na(value)) )]

有了这个,它返回所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM