2012-02-16 3 views
0

私は45年の期間にわたって毎日の温度データを抽出しました。私は、これらのデータを毎年のように変化する変数に追加したり、バインドしたり、バインドしたりするために考えられるすべての可能性を使用しました。 私は時間(as.Date)も含めた値のほかに。残念なことに、最終的な変数は45行と2列で構成され、各セルは値(左列)と日付(右列)を含みます。しかし、セルごとに1つの値を含む2つの列を得るために、セルを「展開」する方法を見つけることはできません。マトリックス内のいくつかのリストオブジェクトを実際のリストに変換します

最初は、merge(、by = 'date')を使ってループからより良い変数を取得しようとしましたが、1年の日付しかないので動作しません。 私は、どちらかのセルを展開するコマンドを探しています。実際には、2つの列(値&の日付)をループ内の変数の末尾に各セルの単一エントリとして追加します。

入力データは、年ブロック(年が書かれた一番上の行、たとえば1960、および31 x 13の行列)が互いに下に書き込まれたテキストファイルです。 -9999は私のNAフラグです。

1960 - - - - - - - - - - - - 
1 -22.2 -13.5 -6.2 -5.4 . . . x(1,13) 
2 -22.4 -15.9 -5.7 7.6 . . . x(2,13) 
    . 
    . 
    . 
31 
30 -9.9 -9999 -8 4.8 . . . x(30,13) 
31 -17 -9999 -6.2  . . . x(31,13) 
1961 - - - - - - - - - - - - 
1 -17.8 -22.6 -11.7 -0.5 4 11.9 10.4 14.8 12 -0.1 -9.2 -16.3 

コードを簡素化:

data   date  
-22.2 1960-01-01 
-22.4 1960-02-01 
... 

乾杯:

data   date  
TMP2 Character,366 Numeric,366 
TMP2 Character,365 Numeric,365 
TMP2 Character,365 Numeric,365 

私がしたいことはこれです:これは私がTMP3の終了時に取得されるものです

dat1 <- data.frame(read.table(filename)) 
dat1$NUM <- 1:length(dat1$V1) #I needed an index 
TYs <- 1960 # Year start 
TYe <- 2005 # Year end 
TYi–TYs 
TMP3 <- NULL #The variable that should store the data. Append new data every loop 

while (TYi <= TYe){ 
    index <- dat1$NUM[dat1$V1==TYi] 

    # get the start and stop of matrix indices 
    begin <- index+1 
    end <- begin+30 
    oddyear <-format(as.Date(paste('3112',TYi),'%d%m%Y'),'%j')== '366' #checks if TYi is oddyear 
    if (oddyear==TRUE){ 
     date <- seq(as.Date(paste('0101',TYi), '%d%m%Y'),as.Date(paste('3112',TYi), '%d%m%Y'),'day') 
     TMP2 <- NULL 
     TMP2$data[1:31] <- TMP[1:31] 
     TMP2$data[32:60] <- TMP[32:60] 
#... 
     TMP2$data[336:366] <- TMP[342:372] 
     TMP2$date <- date 
     TMP3 <- rbind(TMP3, TMP2) 
     TYi <- TYi+1 
     TMP2 <- NULL 
     TMP <- NULL 
       } else { # similar with one day less for non-oddyears 
} 

、 Eric

+7

あなたの最初のデータはどのように見えるのですか?使用しているコード。そして、あなたのデータの望ましい最終フォーマット?それは今のままです...私はあなたが何をしたのか、それをどうやってやったのか、それが間違っているのか分かりません! – Justin

答えて

0

Eric、 私はJustinに同意します。再現可能なサンプルなしで正解を与えることは非常に難しいです。しかし、timeseriesが関わっているときは、xtsパッケージを使用するようにアドバイスします。連結用の

require('xts') 
result<-xts(12.22,order.by=as.POSIXct(paste('1990','-','01','-','01',sep=''))) 

result<-rbind(result,xts(11.22,order.by=as.POSIXct(paste('1991','-','01','-','01',sep='')))) 

あなたが得る必要があります。

1990-01-01 12.22 
1991-01-01 11.22 
0

それは動作します。そして私は、私が使用しようとしていたコマンド(unlist())を見つけました。

result <- xts(as.numeric(unlist(XX[,1])), order.by=as.Date(unlist(XX[,2]))) 

私の結果(XX)のエントリは、マトリックス内のリストでした。 unlist()をxts()と組み合わせて使うことで、美しく動作します。

ありがとうございます。

Eric

関連する問題