gpt4 book ai didi

r - 从 1 个数据帧中的多个时间序列的开头和结尾有效地删除缺失值

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

使用 R,我试图从包含多个时间序列的数据帧的开头和结尾修剪 NA 值。我已经使用 for 循环和 zoo 包实现了我的目标,但正如预期的那样,它在大型数据帧上效率极低。

我的数据框看起来像这样,包含 3 列,每个时间序列由它的唯一 ID 标识。在这种情况下,AAA、B 和 CCC。

id   date          value
AAA 2010/01/01 NA
AAA 2010/02/01 34
AAA 2010/03/01 35
AAA 2010/04/01 30
AAA 2010/05/01 NA
AAA 2010/06/01 28
B 2010/01/01 NA
B 2010/02/01 0
B 2010/03/01 1
B 2010/04/01 2
B 2010/05/01 3
B 2010/06/01 NA
B 2010/07/01 NA
B 2010/07/01 NA
CCC 2010/01/01 0
CCC 2010/02/01 400
CCC 2010/03/01 300
CCC 2010/04/01 200
CCC 2010/05/01 NA

我想知道,如何有效地从每个时间序列的开头和结尾删除 NA 值,在这种情况下是 AAA、B 和 CCC。所以它应该是这样的。
id   date          value
AAA 2010/02/01 34
AAA 2010/03/01 35
AAA 2010/04/01 30
AAA 2010/05/01 NA
AAA 2010/06/01 28
B 2010/02/01 0
B 2010/03/01 1
B 2010/04/01 2
B 2010/05/01 3
CCC 2010/01/01 0
CCC 2010/02/01 400
CCC 2010/03/01 300
CCC 2010/04/01 200

最佳答案

我会这样做,这应该非常快:

require(data.table)
DT = as.data.table(your data) # please provide something pastable

DT2 = DT[!is.na(value)]
setkey(DT,id,date)
setkey(DT2,id,date)
tokeep = DT2[DT,!is.na(value),rolltolast=TRUE,mult="last"]
DT = DT[tokeep]

这是通过在每个组中向前滚动流行的非 NA,但不超过最后一个来实现的。
mult="last"是可选的。如果使用 v1.8.0(在 CRAN 上),它应该会加快速度。对有和没有它的时间感兴趣。默认 data.table加入组( mult="all" ),但在这种情况下,我们加入了键的所有列,并且我们知道键是唯一的;即, key 中没有重复。在 v1.8.1(在开发中)中,不需要了解这一点,它会更多地照顾您。

关于r - 从 1 个数据帧中的多个时间序列的开头和结尾有效地删除缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811357/

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