小编sol*_*sol的帖子

向后填充 R 数据表中 NA 的最后一个实例

我有一个 data.table,其中有一列:

c(58,NA,NA,NA,NA,13,NA,NA,NA,12,23,NA,12)

我想通过向后携带下一个非 NA 值,仅填充列中每个非 NA 值之前的两个 NA。结果应该是:

c(58,NA,NA,13,13,13,NA,12,12,12,23,12,12)

我已经成功做到了:

dt = data.table(V1 = c(58,NA,NA,NA,NA,13,NA,NA,NA,12,23,NA,12))
dt[, rleid:=rleid(dt$V1)]
dt[, num := seq(.N), rleid]

u=1
arr = c()
for (i in 1:(nrow(dt)-1)){
  if(dt$rleid[i] == dt$rleid[i+1]){
    u=u+1
    next
  }
  else{
    arr = append(arr,u)}
  u=1
}
arr=append(arr,1)

v=c()
for (i in 1:(length(arr))){
  for (j in 1:arr[i]){
    v=append(v,arr[i])
  }
}

dt[, len:=v]
dt[, val:=len-num]
dt[, V2 := fifelse(is.na(V1) & val<=1, nafill(V1, "nocb"), V1)]
Run Code Online (Sandbox Code Playgroud)

对于大数据表来说,该解决方案花费的时间太长。有什么更快的建议吗?

r na data.table

3
推荐指数
1
解决办法
61
查看次数

标签 统计

data.table ×1

na ×1

r ×1