根据R中的另一列删除重复日期

时间:2012-05-11 01:08:16

标签: r date duplicates

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

                 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行应该被删除。) 我一直在研究这两种方法:在新数据框中选择我想要的东西,并删除现有的我不想要的东西,但却无法获得。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

与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