[英]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
(即来自相同meastype
的pop
,前一年),我不明白为什么......
我也尝试过:
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.