2

不足している日付を追加し、時間単位の時系列で繰り返される日付を削除する方法。欠落している日付は、該当する日付に降雨量の NA を記入してください。

のような時系列の例

               date  Rainfall(mm)
1970-01-05 00:00:00           1.0 
1970-01-05 01:00:00           1.0
1970-01-05 05:00:00           3.6
1970-01-05 06:00:00           3.6
1970-01-05 07:00:00           2.2
1970-01-05 08:00:00           2.2
1970-01-05 09:00:00           2.2
1970-01-05 10:00:00           2.2
1970-01-05 11:00:00           2.2
1970-01-05 13:00:00           2.2
1970-01-05 13:00:00           2.2
1970-01-05 13:00:00           2.2
4

2 に答える 2

1

の組み合わせを使用して、欠落したタイムステップ(オブジェクト)のないseq.POSIXtを作成し、次にを使用して、私の例で観察されたものと組み合わせることができます。data.framegrid.mergedf

これはあなたの問題を解決するはずです

# Create a sample data.frame missing every second observation.
df <- data.frame(date=seq.POSIXt(from=as.POSIXct("1970-01-01 00:00:00"), to=as.POSIXct("1970-01-01 10:00:00"), by="2 hours"), rainfall=rnorm(6))
#Create a seq of times without anything missing
grid. <- data.frame(date=seq.POSIXt(as.POSIXct("1970-01-01 00:00:00"), to=as.POSIXct("1970-01-01 10:00:00"), by="1 hours"))
# Merge them together keeping all the values from grid.
dat. <- merge(grid., df, by="date", all.x=TRUE)

重複した値を削除するには、それらを検索し、duplicated関数を使用して削除します。

# The ! means the reverse logic. Therefore TRUE becomes FALSE.
dup_index <- !duplicated(dat.[,1])
# Now re-create the dat. object with only non-duplicated rows.
dat. <- dat.[dup_index,]

もう1つの方法は、aggregate関数を使用することです。これは、実際には2つの異なる観測値である重複があり、したがって、を使用して2つの平均が必要な場合に役立ちます。

dat. <- aggregate(dat.[,2], by=list(dat[,1]), FUN=mean)

HTH

于 2012-07-22T11:03:08.873 に答える
1

動物園の FAQ ビネットの FAQ #13 は、時系列の入力に関する部分を扱っています。のaggregate引数read.zooは重複を処理します。この場合、それらを平均化しますが、 を使用するなどの他のアクションを実行することもできますFUN = function(x) tail(x, 1)。ここでは、タイム ゾーンの問題を回避するためにchronの日付/時刻を使用します ( R News 4/1を参照) が、タイム ゾーンが関連する場合は POSIXct を使用できます。

Lines <- "date  Rainfall(mm)
1970-01-05 00:00:00           1.0 
1970-01-05 01:00:00           1.0
1970-01-05 05:00:00           3.6
1970-01-05 06:00:00           3.6
1970-01-05 07:00:00           2.2
1970-01-05 08:00:00           2.2
1970-01-05 09:00:00           2.2
1970-01-05 10:00:00           2.2
1970-01-05 11:00:00           2.2
1970-01-05 13:00:00           2.2
1970-01-05 13:00:00           2.2
1970-01-05 13:00:00           2.2"

library(zoo)
library(chron)

asChron <- function(d, t) as.chron(paste(d, t))
z <- read.zoo(text = Lines, skip = 1, index = 1:2, FUN = asChron, agg = mean)
merge(z, zoo(, seq(start(z), end(z), 1/24))) # as in FAQ

データがファイルからのtext = Linesものである場合は、 file = "myfile.dat".

于 2012-07-22T14:05:48.167 に答える