R 根据过去或将来的值填充缺少的行/空行
假设我有一个数据R 根据过去或将来的值填充缺少的行/空行,r,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 我
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]
is.na(df$Price)这里是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]
当我运行您的代码时,结果看起来与您期望的结果相同,除了ID==3的所有价格条目都是NA。如果您希望在此处命名,可以轻松将其更改回0。似乎他们只需要将NA
更改为0
返回。只需添加[is.NA(Price),Price:=0]
,您应该很好。您如何用值2(而不是3)用ID 2填充缺少的值?@docendodiscimus抱歉,没有检查OP的代码,开始用数据编码。但是,这应该可以解决OP代码中的任何问题。工作正常。Thanks@akrun