在数据框中,我试图寻找远离平均值(阈值* s.d.)的数据点。数据框的dim
如下:
[1] 4032 4
为了找到上述条件的数据点,我做了:
df$mean = rollapply(df$value, width = 2, FUN = mean, align = "right", fill = "extend")
df$sd = rollapply(df$value, width = 2, FUN = sd, align = "right", fill = "extend")
在上述head(df)
之后看起来像:
timestamp value mean sd
2007-03-14 1393577520 37.718 38.088 0.5232590
2007-03-15 1393577220 38.458 38.088 0.5232590
2007-03-16 1393576920 37.912 38.185 0.3860803
2007-03-17 1393576620 40.352 39.132 1.7253405
2007-03-18 1393576320 38.474 39.413 1.3279465
2007-03-19 1393576020 39.878 39.176 0.9927779
要查找数据点:
anomaly = df[df$value > abs((threshold*df$sd + df$mean) |
(df$mean - threshold*df$sd)),]
高于找到远离均值(阈值* s.d.)的数据点的正确方法。我怀疑的原因是dim
anomaly
与df
的{{1}}相同。
答案 0 :(得分:1)
这样做
# creating some dummy data
m <- matrix(runif(16128,-1,1), ncol = 4)
tresh <- .004+1
m[which(abs(m-mean(m)) > tresh*sd(m), arr.ind = T)]
其中m
表示您的矩阵(或您的列value
取决于您采用的均值/ sd)和tresh
您的阈值。
更新以下是我的结果中的前几个条目:
dat <- df$value[which(abs(df$value-mean(df$value)) > tresh*sd(df$value))]
head(dat)
[1] 51.846 48.568 44.986 49.108 53.404 46.314