10

次のようなデータのファイルがいくつかあります。

X code year month day pp  
1 4515 1953     6   1  0  
2 4515 1953     6   2  0  
3 4515 1953     6   3  0  
4 4515 1953     6   4  0  
5 4515 1953     6   5  3.5

データが欠落している場合もありますが、NA がなく、単に行が存在しません。データが欠落しているときに NA を作成する必要があります。Zooオブジェクトに変換して厳密な規則性を確認することで、それがいつ発生するかを特定することから始めることができますが(以前はzooを使用したことがありませんでした)、次のコードを使用しました。

z.date<-paste(CET$year, CET$month, CET$day, sep="/")
z <- read.zoo(CET,  order.by= z.date )
reg<-is.regular(z, strict = TRUE)

しかし、答えは常に真です!

なぜ機能しないのか誰にも教えてもらえますか? または、データが欠落している場合に NA を作成する方法を教えてください (zoo パッケージの有無にかかわらず)。

ありがとう

4

4 に答える 4

21

このseq関数には、日付の完全なシーケンスを簡単に生成するために使用できるいくつかの興味深い機能があります。たとえば、次のコードを使用して、4月25日から始まる一連の日付を生成できます。

編集:この機能はで文書化されています?seq.Date

start = as.Date("2011/04/25")
full <- seq(start, by='1 day', length=15)
full

 [1] "2011-04-25" "2011-04-26" "2011-04-27" "2011-04-28" "2011-04-29"
 [6] "2011-04-30" "2011-05-01" "2011-05-02" "2011-05-03" "2011-05-04"
[11] "2011-05-05" "2011-05-06" "2011-05-07" "2011-05-08" "2011-05-09"

次に、同じ原則を使用して、2日ごとにシーケンスを生成することにより、「行が欠落している」行を含むデータを生成します。

partial <- data.frame(
    date=seq(start, by='2 day', length=6),
    value=1:6
)
partial

        date value
1 2011-04-25     1
2 2011-04-27     2
3 2011-04-29     3
4 2011-05-01     4
5 2011-05-03     5
6 2011-05-05     6

質問に答えるには、ベクトル添え字またはmatch関数を使用して、NAを含むデータセットを作成できます。

with(partial, value[match(full, date)])
 [1]  1 NA  2 NA  3 NA  4 NA  5 NA  6 NA NA NA NA

この結果を元の完全なデータと組み合わせるには:

data.frame(Date=full, value=with(partial, value[match(full, date)]))
         Date value
1  2011-04-25     1
2  2011-04-26    NA
3  2011-04-27     2
4  2011-04-28    NA
5  2011-04-29     3
6  2011-04-30    NA
7  2011-05-01     4
8  2011-05-02    NA
9  2011-05-03     5
10 2011-05-04    NA
11 2011-05-05     6
12 2011-05-06    NA
13 2011-05-07    NA
14 2011-05-08    NA
15 2011-05-09    NA
于 2011-05-19T13:07:10.443 に答える
4

動物園のパッケージで「通常」とは、エントリが欠落している可能性がある場合を除いて、シリーズが等間隔に配置されていることを意味します。zooregzooパッケージのクラスは、特にそのタイプのシリーズ用です。すべての通常のシリーズのセットには、すべての等間隔のシリーズのセットが含まれますが、厳密に大きいことに注意してください。

このis.regular関数は、特定の系列が正規であるかどうかをチェックします。つまり、欠落しているエントリにNAを挿入した場合、シリーズは等間隔にすることができますか?

あなたの最後の質問に関しては、それはFAQです。動物園のCRANページまたはR内から入手できる動物園のFAQのFAQ#13を参照してください。

vignette("zoo-faq") 

また、FAQ#13には、いくつかの例示的なコードがあります。

于 2011-05-19T12:53:55.507 に答える
3

最初に注意することはz.date、日付ではなく文字です。

xts(動物園のサブクラス)を使用して問題を解決する方法は次のとおりです。

# remove the third obs from sample data
CET <- CET[-3,]
# create an actual Date column in CET
CET$date <- as.Date(with(CET, paste(year, month, day, sep="-")))
# create an xts object using 'date' column
x <- xts(CET[,c("code","pp")], CET$date)
# now merge 'x' with a regular date sequence spanning the start/end of 'x'
X <- merge(x, timeBasedSeq(paste(start(x), end(x), sep="::")))
X
#            code  pp
# 1953-06-01 4515 0.0
# 1953-06-02 4515 0.0
# 1953-06-03   NA  NA
# 1953-06-04 4515 0.0
# 1953-06-05 4515 3.5
于 2011-05-19T13:05:51.723 に答える