r - 将 maxgap 更改为结转值的次数
问题描述
我有一个类似于以下的数据框:
library(data.table)
test <- data.table(data.frame("value" = c(5,NA,8,NA,NA,8,6,NA,NA,10),
"locf_N" = c(1,NA,1,NA,NA,1,2,NA,NA,2)) )
在这个数据框中,我有一个变量,它指示我可以将最后一次观察 (locf_N) 结转的时间。这不是所有观察的固定数字。为此,我尝试在 na.locf 函数中使用 maxgap 参数,但它实际上并不是我想要的。
require(zoo)
test[,value := na.locf(value, na.rm = FALSE, maxgap = 1)]
test[,value := na.locf(value, na.rm = FALSE, maxgap = locf_N)]
有没有参数可以设置最后一次观察可以结转的次数?欢迎任何想法。
期望的输出:
output <- data.table(data.frame("value" = c(5,5,8,8,NA,8,6,6,6,10),
"locf_N" = c(1,NA,1,NA,NA,1,2,NA,NA,2)) )
解决方案
cumsum(!is.na(value))
是将每个非 NA 与以下 NA 分组的分组向量。然后对于每个这样的组,重复第一个值所需的次数,并将剩余的值保留为 NA。
test[, list(value = replace(value, 1:min(.N, locf_N[1] + 1), value[1]), locf_N),
by = cumsum(!is.na(value))][, -1]
给予:
value locf_N
1: 5 1
2: 5 NA
3: 8 1
4: 8 NA
5: NA NA
6: 8 1
7: 6 2
8: 6 NA
9: 6 NA
10: 10 2
推荐阅读
- installshield - 在 InstallShield 中动态取消 ControlEvent
- java - 在完整内容处理之前设置 ProgressBar
- python - xampp 和 numpy:ImportError : DLL load failed in my Apache log 错误
- c# - 第一次插入后如何插入数据库?
- c# - 不能隐式转换类型'system.collections.generic.list
'到'字符串' - python - 一旦在骰子游戏中达到 0,停止数字就会减少 - Python
- nginx - Bigcommerce 优化问题
- django - 如何在会话超时时在 Django Admin 中设置自定义管理员登录 URL?
- c++ - 我得到的代码中可能有什么不正确的地方:PhoneBook.exe 已触发断点。发生了
- python - 间隙统计的最佳 K 错误:“int”对象不可迭代