phi*_*sch 7 r time-series missing-data data.table
我有一个data.table,有大量的缺失值.我想通过在data.table中的可用值中添加或减去值来填充这些值.特别要考虑这些数据:
> test = data.table(id=c("A","A","A","A","A","B","B","B","B","B"), x=c(NA,NA,0,NA,NA,NA,NA,0,NA,NA))
> test
id x
1: A NA
2: A NA
3: A 0
4: A NA
5: A NA
6: B NA
7: B NA
8: B 0
9: B NA
10: B NA
Run Code Online (Sandbox Code Playgroud)
我需要一个操作,将其转换为:
id x
1: A -2
2: A -1
3: A 0
4: A 1
5: A 2
6: B -2
7: B -1
8: B 0
9: B 1
10: B 2
Run Code Online (Sandbox Code Playgroud)
基本上是na.locf的一个版本,它增加最后一个值而不是重复它.
我们可以按'id'分组,并将行号(seq_len(.N))与which'x'中的position()区别开来,其中它是0(!x).我正在包装,as.numeric因为'x'列numeric在输入数据集中,但从差异来看,它被转换为'整数'.如果在class分配(:=)时发生冲突,data.table将显示错误,因为它需要匹配class.
test[, x:= as.numeric(seq_len(.N)-which(!x)), id]
test
# id x
# 1: A -2
# 2: A -1
# 3: A 0
# 4: A 1
# 5: A 2
# 6: B -2
# 7: B -1
# 8: B 0
# 9: B 1
#10: B 2
Run Code Online (Sandbox Code Playgroud)
!x否则写得更清楚x==0.它返回一个逻辑向量TRUE/FALSE.如果有NA值,它将保持为NA.通过包装which,我们得到0价值的位置.在示例中,它是3针对每个'id'.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |