3

数時間にわたって複数のエントリがある時系列があります。

                 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値のエントリを取得して、1時間に1つのエントリを持つ時系列に到達する必要があります。(したがって、上のデータでは、2番目のエントリは行2で、行3は削除されているはずです。)私は両方のアプローチに取り組んできました。新しいデータフレームに必要なものを選択し、不要なものを削除します。既存ですが、どこにも行きません。ご協力いただきありがとうございます。

4

2 に答える 2

1

datemh使用してデータを並べ替え、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
于 2012-05-11T03:02:11.447 に答える
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
于 2012-05-11T08:08:56.983 に答える