更新: 私の NOAA GHCN-Daily ウェザー ステーション データ関数はクリーンアップされ、rnoaaパッケージに統合されました。CRAN またはこちらから入手できます: https://github.com/ropensci/rnoaa
複数のデータ フレームで構成されるデータ セット全体の統計を計算する R 関数を設計しています。つまり、名前を含む参照データ フレームに基づいて、クラスごとにデータ フレームをプルしたいと考えています。次に、特定の日ごとにリストされたメトリックの値に統計関数を適用したいと考えています。実際には、データ フレームのリストを呼び出してオーバーレイし、値が NA ではないすべての一意の日付とメトリックの値のベクトルで関数を計算したいと考えています。
データ フレームは、'by' 関数を使用して、クラス変数に基づいてファイルからワークスペースに繰り返し読み込まれます。特定のクラスのファイルをインポートした後、そのクラスのデータ フレームと、ある範囲内の各ユーザー定義メトリックを rbind() したいと考えています。次に、ユーザー提供の統計関数の連結を、年、月、日の特定の値に対応するクラス内の各メトリックに適用したいと考えています (つまり、7 月 1 日の平均 [関数] 低温 [クラス]、 1990 [日付] は、特定の地域 [クラス] 内のすべての場所 [データ フレーム] にわたって報告されました.最終結果は、地域内のすべての日付の値と、適用される各メトリックおよび統計関数の年の範囲を含む新しいデータ フレームにしたいと考えています。私は、aggregate() 関数を使用してこの結果を得るのに非常に近づいています。しかし、平均温度以外のほとんどの関数に対して現在 NA と NaN を出力している集計関数から妥当な結果を得るのに問題があります。どんなアドバイスでも大歓迎です!これまでの私のコードは次のとおりです。
# Example parameters
w <- c("mean","sd","scale") # Statistical functions to apply
x <- "C:/Data/" # Folder location of CSV files
y <- c("MaxTemp","AvgTemp","MinTemp") # Metrics to subset the data
z <- c(1970:2000) # Year range to subset the data
CSVstnClass <- data.frame(CSVstations,CSVclasses)
by(CSVstnClass, CSVstnClass[,2], function(a){ # Station list by class
suppressWarnings(assign(paste(a[,2]),paste(a[,1]),envir=.GlobalEnv))
apply(a, 1, function(b){ # Data frame list, row-wise
classData <- data.frame()
sapply(y, function(d){ # Element list
CSV_DF <- read.csv(paste(x,b[2],"/",b[1],".csv",sep="")) # Read in CSV files as data frames
CSV_DF1 <- CSV_DF[!is.na("Value")]
CSV_DF2 <- CSV_DF1[which(CSV_DF1$Year %in% z & CSV_DF1$Element == d),]
assign(paste(b[2],"_",d,sep=""),CSV_DF2,envir=.GlobalEnv)
if(nrow(CSV_DF2) > 0){ # Remove empty data frames
classData <<- rbind(classData,CSV_DF2) # Bind all data frames by row for a class and element
assign(paste(b[2],"_",d,"_bound",sep=""),classData,envir=.GlobalEnv)
sapply(w, function(g){ # Function list
# Aggregate results of bound data frame for each unique date
dataFunc <- aggregate(Value~Year+Month+Day+Element,data=classData,FUN=g,na.action=na.pass)
assign(paste(b[2],"_",d,"_",g,sep=""),dataFunc,envir=.GlobalEnv)
})
}
})
})
})
私はかなり近いと思いますが、 rbind() が適切に実行されているかどうか、また、aggregate() 関数が非常に多くのメトリックに対して NA と NaN を出力している理由もわかりません。データ フレームが結合されていないか、一部の統計関数で欠損値が適切に処理されていないことが懸念されました。あなたが提供できるアドバイスを事前に感謝します。
乾杯、
アダム