【问题标题】:Identify and eliminate extraneous/noise values from a data series in R从 R 中的数据系列中识别并消除无关/噪声值
【发布时间】:2021-12-28 23:03:20
【问题描述】:

我有一个包含日期、温度和时间的数据框。该数据帧可以有数千行,具体取决于温度测量的数量。有时会出现测量错误,并且数据框中会出现一个或多个错误值。如何在 R 中自动消除温度错误的线条?

这是一个例子:

              date  temp   time
    1   2021-09-01    14 04:59:27
    2   2021-09-01    15 04:59:28
    3   2021-09-01    15 04:59:30
    4   2021-09-01    14 04:59:30
    5   2021-09-01    14 04:59:32
    6   2021-09-01    10 04:59:32
    7   2021-09-01    14 04:59:33
    8   2021-09-01    14 04:59:35
    9   2021-09-01    15 04:59:35
    10  2021-09-01    14 04:59:36
    11  2021-09-01    15 04:59:37
    12  2021-09-01     6 04:59:38
    13  2021-09-01     6 04:59:39
    14  2021-09-01     6 04:59:41
    15  2021-09-01    14 04:59:41
    16  2021-09-01    15 04:59:42
    17  2021-09-01    15 04:59:44
    18  2021-09-01    14 04:59:44
    19  2021-09-01    15 04:59:45
    20  2021-09-01    15 04:59:45
    21  2021-09-01    15 04:59:45

(...)

当然,第 6、12、13、14 行是不正确的,因为这种以秒为单位的变化是不可能的,我想删除它们。

强调:我需要一种自动的方法来识别并稍后消除这些行,因为我可能在数千行中还有其他类似的情况

【问题讨论】:

  • 为什么第 6、12、13 和 14 行是错误的?如何判断某些行是错误的?
  • 我认为您可以在一段时间内(例如使用slider::slide_index())取一个运行平均值,并根据您对哪些变化是正常的领域知识过滤掉超出范围的某个阈值的值以及哪些可能是错误的。
  • 错了,因为温度不可能在5秒内下降和上升8度,或者在同一秒内有2个不同的值。
  • 另外,通过使用运行平均值,我的问题是如何定义阈值,因为我可以将温度设置在 6 左右,例如在一天的最后一天,但在这个示例中,运行平均值接近 6 意味着我有错误的价值观...

标签: r noise


【解决方案1】:

为了方便起见,这是一个使用一堆库的示例。

首先,我将日期 + 时间转换为 POSIXct 日期时间格式的组合时间戳。然后我取 30 秒的温度滚动平均值,并从中计算每个点的方差。 (注意,如果没有一些领域知识,可能很难想出正确的“噪声”过滤器;如果有更多错误的读数,最终它们看起来就像这里的“正确”的。)最后,我将它们绘制成图表并展示在这种情况下,+/- 3 度的阈值如何将噪声值与正确的值区分开来。

library(dplyr); library(lubridate); library(slider); library(ggplot2)
df1 %>%
  mutate(timestamp = lubridate::mdy_hms(paste(date, time))) %>% 
  mutate(rolling_avg = slider::slide_index_dbl(temp, timestamp, mean, 
                                               .before = 30)) %>%
  mutate(variance = temp - rolling_avg) %>%
  ggplot(aes(timestamp, temp)) +
  geom_line(aes(y = rolling_avg), lty = "dashed") +
  geom_point(aes(color = abs(variance) > 3))

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2018-02-07
    • 2023-03-25
    • 2022-10-04
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多