根据过去或将来的值填充缺失/空行

  • 本文关键字:填充 空行 过去 将来 r
  • 更新时间 :
  • 英文 :


>假设我有一个数据

ID Price 
1  0
1  0
1  0
1  5
2  2
2  0
2  0
2  3
3  0
3  0
3  0
3  0
4  2
4  2
4  0
4  2

我想根据某个ID中的过去或将来的值填充缺失单元格的值,但是如果特定ID的所有值均为零,请保持原样。

所以表格看起来像

ID Price 
1  5
1  5
1  5
1  5
2  2
2  2
2  2
2  3
3  0
3  0
3  0
3  0
4  2
4  2
4  2
4  2

我尝试使用以下代码解决它

is.na(df$Price) <- df$Price==0
setDT(df1)[,Price := na.locf(na.locf(Price, na.rm=FALSE), fromLast=TRUE) , by = ID]

但它会将 Price 的所有值更改为 FALSE 或 TRUE。我做错了什么?

这是OP代码的一个变体,用于在data.table框架中执行所有步骤。 我们将"data.frame"转换为"data.table"。 将 0 的"价格"值转换为 NA,使用开始值和结束值的na.locf,按"ID"分组,最后将"NA"值转换为 0。

library(zoo)
library(data.table)
setDT(df2)[,  PriceN := na.locf(na.locf(Price*(NA_real_^!Price),
     na.rm=FALSE), fromLast=TRUE, na.rm=FALSE), ID
       ][is.na(PriceN), PriceN := 0]

最新更新