我有几个小时的多个条目的时间序列。
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行应该被删除。) 我一直在研究这两种方法:在新数据框中选择我想要的东西,并删除现有的我不想要的东西,但却无法获得。谢谢你的帮助。
答案 0 :(得分:1)
您可以使用date
按mh
和plyr::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