假设我有数据
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。我做错了什么?
答案 0 :(得分:2)
以下是OP代码的变体,用于执行data.table框架中的所有步骤。我们转换了&#39; data.frame&#39;到&#39; data.table&#39;。转换价格&#39;值为0到NA,使用开始和结束值na.locf
,按ID&#39;分组,最后转换&#39; NA&#39;值为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]