首页 文章

将时间序列的异常值替换为时间序列中的其他值

提问于
浏览
1

我有一个时间序列,我想随机替换异常值与其他(非异常值)值 . 时间序列如下:

date           Category      Value1
2018-09-10       A            .4
2018-09-10       B            .6
2018-09-10       A             4
2018-09-10       C            .2
2018-09-10       D             7

然后我试图确定以下异常值:

qn = quantile(df1$value1, c(0.05, 0.85), na.rm = TRUE)
df6 = within(df1, { value = ifelse(df1$value1 < qn[1], qn[1], df1$value1)
value = ifelse(df1$value1  > qn[2], qn[2], df1$value1 )})

然后我想用列 value1 中的一些值替换异常值,这些值不是异常值 .

1 回答

  • 3

    如果您想以一种方式随机替换异常值

    #Find out indices which are outliers
    inds <- df1$Value1 > qn[2] | df1$Value1 < qn[1]
    
    #Replace those outliers by randomly selecting non-outliers  
    df1$Value1[inds] <- sample(df1$Value1[!inds], sum(inds))
    
    df1
    #       date  Category Value1
    #1 2018-09-10        A    0.4
    #2 2018-09-10        B    0.6
    #3 2018-09-10        A    4.0
    #4 2018-09-10        C    4.0
    #5 2018-09-10        D    0.6
    

    data

    df1 <- read.table(text = "date           Category      Value1
                              2018-09-10       A            .4
                              2018-09-10       B            .6
                              2018-09-10       A             4
                              2018-09-10       C            .2
                              2018-09-10       D             7", header =T)
    
    qn <- quantile(df1$Value1, c(0.05, 0.85), na.rm = TRUE)
    

相关问题