【问题标题】:Finding errors in known patterns from data in R?从 R 中的数据中查找已知模式中的错误?
【发布时间】:2017-04-21 21:56:30
【问题描述】:

我正在尝试使用 R 来确定数据集中的错误。数据集包含一列中的时间(以秒为单位)以及另一列中是否发生了“运行”。 RunStart 列中的“0”表示运行的开始,而“1”只是运行的继续。

在下面的示例表中,运行的时间间隔应为 10 秒

如果所有后续值都是 10 秒的倍数,我想找出运行开始的时间,并确定所有不正确的行。在示例中,所有行都是正确的,除了第 9 行,它在同一次运行中与第 8 行相差 9 秒。如何隔离大型数据集中的第 9 行等错误?

   Time RunStart
1   10        0
2   20        1
3   30        1
4  101        0
5  111        1
6  121        1
7  202        0
8  212        1
9  221        1

我很难找到从哪里开始,我目前正在研究“plyr”包和 R 网站上 R 文档中数据清理的介绍。我试图在其中查找错误的完整数据集超过 300 000 行。

【问题讨论】:

    标签: r data-cleaning


    【解决方案1】:

    有了dplyr,我们可以做到:

    library(dplyr)
    
    
    df %>% 
      mutate(regular = RunStart == 0 | Time - lag(Time) == 10)
    #>   Time RunStart regular
    #> 1   10        0    TRUE
    #> 2   20        1    TRUE
    #> 3   30        1    TRUE
    #> 4  101        0    TRUE
    #> 5  111        1    TRUE
    #> 6  121        1    TRUE
    #> 7  202        0    TRUE
    #> 8  212        1    TRUE
    #> 9  221        1   FALSE
    

    【讨论】:

      【解决方案2】:

      您可以使用diff 获取时差,检查哪些不是十的倍数,并将其与延续记录相匹配。

      intersect(which((c(0,diff(df$Time)) %% 10) != 0), 
            which(df$RunStart == 1))
      [1] 9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-28
        • 2021-11-10
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 2022-07-25
        相关资源
        最近更新 更多