按组完成时,data.table中的na.locf

R.M*_*.M. 0 r data.table

我有一个data.table,我想在其中填写一栏以填写一些缺失的值,但是在填写其他栏时遇到了一些麻烦。

dt = data.table(a = c(1, 3, 5), b = c('a', 'b', 'c'))
dt[, .(a = seq(min(a), max(a), 1), b = na.locf(b))]
#    a b
# 1: 1 a
# 2: 2 b
# 3: 3 c
# 4: 4 a
# 5: 5 b
Run Code Online (Sandbox Code Playgroud)

但是正在寻找更像这样的东西:

dt %>% 
  complete(a = seq(min(a), max(a), 1)) %>%
  mutate(b = na.locf(b))
# # A tibble: 5 x 2
#       a b    
# <dbl> <chr>
# 1     1 a    
# 2     2 a    
# 3     3 b    
# 4     4 b    
# 5     5 c 
Run Code Online (Sandbox Code Playgroud)

最后一个值结转到哪里

Jaa*_*aap 5

仅具有的(滚动)功能的另一种可能的解决方案:

dt[.(min(a):max(a)), on = .(a), roll = Inf]
Run Code Online (Sandbox Code Playgroud)

这使:

   a b
1: 1 a
2: 2 a
3: 3 b
4: 4 b
5: 5 c
Run Code Online (Sandbox Code Playgroud)

在大型数据集上,这可能会胜过其他所有解决方案。

感谢@ Mako212,seq他在回答中给出了提示。


首次发布的解决方案有效,但给出警告:

dt[dt[, .(a = Reduce(":", a))], on = .(a), roll = Inf]
Run Code Online (Sandbox Code Playgroud)