【问题标题】:Removing duplicate dates based on another column in R基于R中的另一列删除重复日期
【发布时间】:2012-05-19 14:57:41
【问题描述】:

我有几个小时的多个条目的时间序列。

                 date  wd  ws temp sol octa pg  mh daterep
1 2007-01-01 00:00:00 100 1.5  9.0   0    8  D 100   FALSE
2 2007-01-01 01:00:00  90 2.6  9.0   0    7  E  50    TRUE
3 2007-01-01 01:00:00  90 2.6  9.0   0    8  D 100    TRUE
4 2007-01-01 02:00:00  40 1.0  8.8   0    7  F  50   FALSE
5 2007-01-01 03:00:00  20 2.1  8.0   0    8  D 100   FALSE
6 2007-01-01 04:00:00  30 1.0  8.0   0    8  D 100   FALSE

我需要得到一个每小时一个条目的时间序列,在有多个条目的情况下采用具有最小 mh 值的条目。 (所以在上面的数据中我的第二个条目应该是第 2 行,第 3 行应该被删除。) 我一直在研究这两种方法:在新数据框中挑选出我想要的东西,并在现有的数据框中删除我不想要的东西,但没有得到任何结果。感谢您的帮助。

【问题讨论】:

    标签: r date duplicates


    【解决方案1】:

    您可以使用plyr::arrangedatemh 对数据进行排序,然后删除重复项:

    df <- read.table(textConnection("
    
                   date    wd  ws temp sol octa pg  mh daterep
    '2007-01-01 00:00:00' 100 1.5  9.0   0    8  D 100   FALSE
    '2007-01-01 01:00:00'  90 2.6  9.0   0    7  E  50    TRUE
    '2007-01-01 01:00:00'  90 2.6  9.0   0    8  D 100    TRUE
    '2007-01-01 02:00:00'  40 1.0  8.8   0    7  F  50   FALSE
    '2007-01-01 03:00:00'  20 2.1  8.0   0    8  D 100   FALSE
    '2007-01-01 04:00:00'  30 1.0  8.0   0    8  D 100   FALSE
    
    "), header = TRUE)
    
    library(plyr)
    df <- arrange(df, date, mh)
    df <- df[!duplicated(df$date), ]
    df
    #                  date  wd  ws temp sol octa pg  mh daterep
    # 1 2007-01-01 00:00:00 100 1.5  9.0   0    8  D 100   FALSE
    # 2 2007-01-01 01:00:00  90 2.6  9.0   0    7  E  50    TRUE
    # 4 2007-01-01 02:00:00  40 1.0  8.8   0    7  F  50   FALSE
    # 5 2007-01-01 03:00:00  20 2.1  8.0   0    8  D 100   FALSE
    # 6 2007-01-01 04:00:00  30 1.0  8.0   0    8  D 100   FALSE
    

    【讨论】:

      【解决方案2】:

      类似于 flodel,但使用基数 R 并确保 date 是一个真正的 DateTimeClass:

      d <- read.table(text = "
                     date    wd  ws temp sol octa pg  mh daterep
      '2007-01-01 00:00:00' 100 1.5  9.0   0    8  D 100   FALSE
      '2007-01-01 01:00:00'  90 2.6  9.0   0    7  E  50    TRUE
      '2007-01-01 01:00:00'  90 2.6  9.0   0    8  D 100    TRUE
      '2007-01-01 02:00:00'  40 1.0  8.8   0    7  F  50   FALSE
      '2007-01-01 03:00:00'  20 2.1  8.0   0    8  D 100   FALSE
      '2007-01-01 04:00:00'  30 1.0  8.0   0    8  D 100   FALSE
      ", header = TRUE)
      
      d$date <- as.POSIXct(d$date)
      
      d <- d[order(d$date, d$mh), ]
      d[!duplicated(d$date), ]
      
                       date  wd  ws temp sol octa pg  mh daterep
      1 2007-01-01 00:00:00 100 1.5  9.0   0    8  D 100   FALSE
      2 2007-01-01 01:00:00  90 2.6  9.0   0    7  E  50    TRUE
      4 2007-01-01 02:00:00  40 1.0  8.8   0    7  F  50   FALSE
      5 2007-01-01 03:00:00  20 2.1  8.0   0    8  D 100   FALSE
      6 2007-01-01 04:00:00  30 1.0  8.0   0    8  D 100   FALSE
      

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 1970-01-01
        • 2016-12-02
        • 2017-02-20
        • 2020-06-22
        • 2023-01-19
        • 2018-10-23
        • 2021-08-13
        • 1970-01-01
        相关资源
        最近更新 更多