【问题标题】:Conditional interpolation of time series data in RR中时间序列数据的条件插值
【发布时间】:2017-08-12 02:01:22
【问题描述】:

我有 N/As 的时间序列数据。数据将以动画散点图结束

Week    X   Y
 1      1   105
 2      3   110
 3      5   N/A
 4      7   130
 8     15   160
12     23   180
16     30   N/A
20     37   200

对于流畅的动画,数据将由计算的附加值/行进行补充。对于 X 值,这只是算术运算。目前没问题。

Week    X   Y
 1      1   105
        2
 2      3   110
        4
 3      5   N/A
        6
 4      7   130
        8
        9
       10
       11
       12
       13
       14
 8     15   160
       16
       17
       18
       19
       20
       21
       22
12     23   180
       24
       25
       26
       27
       28
       29
16     30   N/A
       31
       32
       33
       34
       35
       36
20     37   200

应该对 Y 值进行插值,并且还有一个额外的要求,即插值应该只出现在两个连续值之间,而不是出现在它们之间存在 N/A 的值之间。

Week    X   Value
 1      1   105
        2   interpolated value
 2      3   110
        4
 3      5   N/A
        6
 4      7   130
        8   interpolated value
        9   interpolated value
       10   interpolated value
       11   interpolated value
       12   interpolated value
       13   interpolated value
       14   interpolated value
 8     15   160
       16   interpolated value
       17   interpolated value
       18   interpolated value
       19   interpolated value
       20   interpolated value
       21   interpolated value
       22   interpolated value
12     23   180
       24
       25
       26
       27
       28
       29
16     30   N/A
       31
       32
       33
       34
       35
       36
20     37   200

我已经尝试过大约,将“原始”N/A 转换为占位符值,并尝试使用 na.approx 等的 zoo 包,但不明白,为这种“表达正确的条件语句”条件近似”或“条件填空”。欢迎任何提示并非常感谢。

提前致谢

【问题讨论】:

    标签: r conditional interpolation zoo


    【解决方案1】:

    用 Inf 替换 NA,进行插值,然后将无限值恢复为 NA。

    library(zoo)
    
    DF2 <- DF
    DF2$Y[is.na(DF2$Y)] <- Inf
    
    w <- merge(DF2, data.frame(Week = min(DF2$Week):max(DF2$Week)), by = 1, all.y = TRUE)
    w$Value <- na.approx(w$Y)
    w$Value[!is.finite(Value)] <- NA
    

    在以下情况下,周已扩展到所有周,Y 使得原始 NA 显示为 Inf,插入的 NA 显示为 NA。值是插值 Y。

    > w
       Week  X   Y Value
    1     1  1 105 105.0
    2     2  3 110 110.0
    3     3  5 Inf    NA
    4     4  7 130 130.0
    5     5 NA  NA 137.5
    6     6 NA  NA 145.0
    7     7 NA  NA 152.5
    8     8 15 160 160.0
    9     9 NA  NA 165.0
    10   10 NA  NA 170.0
    11   11 NA  NA 175.0
    12   12 23 180 180.0
    13   13 NA  NA    NA
    14   14 NA  NA    NA
    15   15 NA  NA    NA
    16   16 30 Inf    NA
    17   17 NA  NA    NA
    18   18 NA  NA    NA
    19   19 NA  NA    NA
    20   20 37 200 200.0
    

    注意:以可重复的形式输入DF

    Lines <- "
    Week    X   Y
     1      1   105
     2      3   110
     3      5   N/A
     4      7   130
     8     15   160
    12     23   180
    16     30   N/A
    20     37   200"
    DF <- read.table(text = Lines, header = TRUE, na.strings = "N/A")
    

    【讨论】:

    • 工作就像一个魅力!再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2018-07-11
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多