質問
45年の期間にわたって毎日の温度データを抽出しました。私は、それらのデータを毎年成長する変数に追加するために、私が考えることができるすべての可能性を使用しました。値に加えて、時間を含めました(as.date)。私の最終変数は、残念ながら、各セルに値(左列)と日付(右列)を含む45行と2列で構成されています。ただし、セルを「拡張」してセルごとに1つの値を含む2つの列を獲得する方法を見つけることができません。
最初は、マージ(、= '日付')を使用してループからより良い変数を取得しようとしましたが、1年の日付しか持っていないので機能していません。セルを拡張するか、さらに良いコマンドを探しています。さらに、各セルの単一エントリとしてループ内の変数の下部にある2つの列(値と日付)を実際に追加します。
入力データは、年ブロック(1960年EGが記述された年の先行行、31 x 13マトリックス)を備えたテキストファイルです。 -9999は私のNA-FLAGSです。
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
単純化されたコード:
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
}
これは私がTMP3の最後に得たものです:
data date
TMP2 Character,366 Numeric,366
TMP2 Character,365 Numeric,365
TMP2 Character,365 Numeric,365
私が欲しいのはこれです:
data date
-22.2 1960-01-01
-22.4 1960-02-01
...
乾杯、エリック
解決
エリック、私はジャスティンに同意します、再現性のあるサンプルなしであなたに正しい答えを与えることは非常に困難です。ただし、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
他のヒント
できます。また、使用することを意図したコマンドを見つけました(unlist())。
result <- xts(as.numeric(unlist(XX[,1])), order.by=as.Date(unlist(XX[,2])))
私の結果(xx)のエントリは、マトリックス内のリストでした。 XTS()と組み合わせてUnlist()を使用することにより、それは美しく機能します。
どうもありがとう。
エリック