【问题标题】:Dealing with mistakes in recording the dataset in R处理在 R 中记录数据集的错误
【发布时间】:2020-10-24 23:05:51
【问题描述】:

我的数据集有一个相当复杂的问题。它包括 600,000 个观测值。主要问题与数据收集过程有关。作为示例,我提供了以下数据集,该数据集与我手头的真实数据具有相似的结构:

df <- data.frame(row_number = c(1,2,3,4,5,6,7,8,9), 
                date = c("2020-01-01", "2020-01-01","2020-01-01","2020-01-02","2020-01-02","2020-01-02","2020-01-03","2020-01-03","2020-01-03"),
                time = c("01:00:00","09:00:00","17:00:00", "09:00:00","01:00:00","17:00:00", "01:00:00","NA","09:00:00"),
                order = c(1,2,3,1,2,3,1,2,3), 
                value = c(10,20,30,40,10,20,30,NA,50)

我知道每天记录 3 次数据(顺序变量)。即在每一天,第一次记录数据是 1:00:00,第二次记录数据是 09:00:00,最后一次记录数据是 17: 00:00。

但是,收集数据的人犯了错误。例如,在 row_num 4 中,时间应该是 01:00:00,但数据采集器记录的是 09:00:00。 另外,在第 8 行中,我预计时间应该是 9:00:00,但是,由于没有信息记录在 value 中,因此该人没有填写该行,而是将时间记录为 09:00:00 3号订单,而预计3号订单的时间是17:00:00。

鉴于我们知道数据收集的顺序,我想知道您是否有任何解决方案来处理数据集中的此类问题。

提前感谢您的宝贵时间。

【问题讨论】:

    标签: r date time


    【解决方案1】:

    创建一组 3 行并按照我们想要的顺序给出时间:

    library(dplyr)
    
    df %>%
      group_by(grp = ceiling(row_number/3)) %>%
      mutate(time = c('01:00:00', '09:00:00', '17:00:00')) %>%
      ungroup %>% select(-grp)
    
    #   row_number date       time     order value
    #       <dbl> <chr>      <chr>    <dbl> <dbl>
    #1          1 2020-01-01 01:00:00     1    10
    #2          2 2020-01-01 09:00:00     2    20
    #3          3 2020-01-01 17:00:00     3    30
    #4          4 2020-01-02 01:00:00     1    40
    #5          5 2020-01-02 09:00:00     2    10
    #6          6 2020-01-02 17:00:00     3    20
    #7          7 2020-01-03 01:00:00     1    30
    #8          8 2020-01-03 09:00:00     2    NA
    #9          9 2020-01-03 17:00:00     3    50
    

    【讨论】:

      【解决方案2】:
      time <- c("01:00:00","09:00:00","17:00:00")
      rep(time, 200000)
      

      rep() 函数允许您为数据集重复任意次数的向量。这允许您创建 3 个观察时间段,然后为您重复 600,000 次观察,这样您就可以消除人为错误。

      【讨论】:

      • 您好,感谢您的回复。我应该以不同的方式写我的问题。对于那个很抱歉。我在我的问题中包含的数据集是我手中的一个例子。事实上,我的数据集包括大约 600,000 个观察结果,其中一些是按照问题中的说明记录下来的。
      • 更新了我的答案,希望我能给你更多你想要的东西
      猜你喜欢
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2013-11-23
      • 2023-04-02
      • 1970-01-01
      • 2017-09-24
      相关资源
      最近更新 更多