gpt4 book ai didi

r - na.locf 将 NAs 填充到 maxgap,即使间隙 > maxgap,带组

转载 作者:行者123 更新时间:2023-12-04 12:18:15 25 4
gpt4 key购买 nike

我已经看到了一个解决方案,但不能让它为团体工作
( Fill NA in a time series only to a limited number ),并认为必须有一种更简洁的方法来做到这一点?

假设我有以下 dt:

dt <- data.table(ID = c(rep("A", 10), rep("B", 10)), Price = c(seq(1, 10, 1), seq(11, 20, 1)))
dt[c(1:2, 5:10), 2] <- NA
dt[c(11:13, 15:19) ,2] <- NA
dt
ID Price
1: A NA
2: A NA
3: A 3
4: A 4
5: A NA
6: A NA
7: A NA
8: A NA
9: A NA
10: A NA
11: B NA
12: B NA
13: B NA
14: B 14
15: B NA
16: B NA
17: B NA
18: B NA
19: B NA
20: B 20

我想做的是填写 NA s 两者 从最近的非 NA 向前和向后值,但最多只能向前或向后两行。

我还需要按组(ID)来完成。

我试过使用 na.locf/ na.approxmaxgap = x等,但它没有填写 NA s 非 NA 之间的差距在哪里值大于 maxgap .而即使非 NA之间的差距,我也想向前和向后填充这些值大于 maxgap ,但只有两行。

最终结果应该类似于:
    ID Price Price_Fill
1: A NA 3
2: A NA 3
3: A 3 3
4: A 4 4
5: A NA 4
6: A NA 4
7: A NA NA
8: A NA NA
9: A NA NA
10: A NA NA
11: B NA NA
12: B NA 14
13: B NA 14
14: B 14 14
15: B NA 14
16: B NA 14
17: B NA NA
18: B NA 20
19: B NA 20
20: B 20 20

现实中,我的数据集是海量的,我希望能够填满 NA s 向前和向后最多 672 行,但不能更多,按组。

谢谢!

最佳答案

对于显示的示例,我们按“ID”分组,得到 shift “价格”与 n = 0:2 , 和 type作为创建 3 个临时列的“领导”,获取 pmax由此,使用输出来做 shifttype = 'lag' (默认情况下它是“滞后”)和相同的 n ,获取 pmin并将其分配为“Price_Fill”

dt[, Price_Fill := do.call(pmin, c(shift(do.call(pmax, c(shift(Price, n = 0:2, 
type = "lead"), na.rm=TRUE)), n= 0:2), na.rm = TRUE)) , by = ID]
dt
# ID Price Price_Fill
#1: A NA 3
#2: A NA 3
#3: A 3 3
#4: A 4 4
#5: A NA 4
#6: A NA 4
#7: A NA NA
#8: A NA NA
#9: A NA NA
#10: A NA NA
#11: B NA NA
#12: B NA 14
#13: B NA 14
#14: B 14 14
#15: B NA 14
#16: B NA 14
#17: B NA NA
#18: B NA 20
#19: B NA 20
#20: B 20 20

更通用的方法是执行 pmin/pmax.I因为“价格”可以不同,而不是 OP 帖子中显示的序列号。
i1 <- dt[,  do.call(pmin, c(shift(do.call(pmax, c(shift(NA^(is.na(Price))* 
.I, n = 0:2, type = "lead"), na.rm = TRUE)), n = 0:2), na.rm = TRUE)), ID]$V1

dt$Price_Fill < dt$Price[i1]
dt$Price_Fill
#[1] 3 3 3 4 4 4 NA NA NA NA NA 14 14 14 14 14 NA 20 20 20

即假设我们改变“价格”,它会有所不同
dt$Price[3] <- 10
dt$Price[14] <- 7
dt$Price_Fill <- dt$Price[i1]
dt$Price_Fill
#[1] 10 10 10 4 4 4 NA NA NA NA NA 7 7 7 7 7 NA 20 20 20

关于r - na.locf 将 NAs 填充到 maxgap,即使间隙 > maxgap,带组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com