私の最初の質問Stackoverflow :)私はあなたが私を助けることができることを願っています。rで月間最長の連続した数字を取得し、それを合計してそれを保存します
私は、データセットで月に一番長い雨の日を見つけようとしましたが、雨の総量を合計し、雨が降った日数と雨の合計をマトリックスに保存しました。雨の日数を取得して保存するのに成功しましたが、1つのシナリオでは2,5時間、次のシナリオでは12モデル×4つのシナリオが283ポイントでした。私は行列の読み書きが非効率であることをどこかで読んだので、私の推測では操作がより効率的になるということです。
このリンクはすでにlongest consecutiveに役立ちますが、私の質問はさらに進んでいます。
この質問では、2年間の雨量値を使用することをお勧めします。これは、毎月および毎年の最も長い連続した雨の日量を見つけるための日付とリンクします。出力を行列に書きます。そして、盆地の10ポイントを実行しました。
連続した番号を取得し、行列にそれを書くために使用される機能:
WriteRainyDaysCountToMatrix <- function(myDataFrame, myDates, mymatrix, i)
{
monthsAmount <- 24
for (monthNumber in 1:monthsAmount){
#print(cat("monthNumber = ", monthNumber))
year <- toString(myDates[monthNumber,2])
month <- toString(myDates[monthNumber,1])
dayCounter <- 0
precipitationMax <- 0
lastRowPrecipitation <- F
for (rowNumber in 1:nrow(myDataFrame)){
rowDate <- myDataFrame[rowNumber,1]
rowYear <- substr(rowDate,1,4)
rowMonth <- substr(rowDate,5,6)
if (rowYear == year && rowMonth == month){
rowPrecipitation <- myDataFrame[rowNumber,2]
if (rowPrecipitation > 0){
dayCounter <- dayCounter + 1
lastRowPrecipitation <- T
}
else{
if (lastRowPrecipitation == T && precipitationMax == 0){
precipitationMax <- dayCounter
dayCounter <- 0
lastRowPrecipitation <- F
}
else if (lastRowPrecipitation == T && precipitationMax < dayCounter){
precipitationMax <- dayCounter
dayCounter <- 0
lastRowPrecipitation <- F
}
else{
dayCounter <- 0
lastRowPrecipitation <- F
}
}
}
}
if (lastRowPrecipitation == T && precipitationMax == 0){
precipitationMax <- dayCounter
}
mymatrix[[monthNumber,i]] <- precipitationMax
}
return (mymatrix)
}
値を格納するために、空の行列はここで定義されています
pmatrix_hist <- matrix(data=NA,nrow=12,ncol=10,dimnames=list(c(1:24),c(1:10)))
日付入力(テキストファイルとして)myDates:
01 1981 02 1981 03 1981 04 1981、 05 1981 06 1981 07 1981 08 1981 09 1981 10 1981、 11 1981、12 19 81、1982年01、02 1982、03 1982、04 1982、 05 1982、06 1982、07 1982、08 1982、09 1982、10 1982、 11 1982、12 1982、など
Time_step_histは、テキストから来ていますこの形式での2年間の日付を含むファイル:
19810101、19810102、19810103、19810104、19810105など
そして、私のために仕事をするために、forループ:
for (i in 1:10) {
# loop over dates and acquire date
Prec_hist = read.table(paste(P_read_table_hist$V1[i]), header=F)
# then put date and rain together
data_Prec_Hist <- data.frame(Time_step_hist[1:7305,], Prec_hist[1:7305,])
# call function to get and write to matrix
pmatrix_hist <- WriteRainyDaysCountToMatrix(data_Prec_Hist, Dates_hist, pmatrix_hist, i)
}
私にはわかりません私が使っている雨のデータを入れる方法は、単純なlis代わりに0と1のtを使用することができます。
マトリックスには日数のみが格納され、これらの連続した日の間に雨の合計を格納するための2番目のマトリックスが可能です。
最大のパフォーマンス向上はどこで可能ですか?
事前に感謝します。
コメントいただきありがとうございます。私は少し私を参照して終了する変更する必要があります! – jjjj