長形式風データをワイドフォーマットに変換しようとしています。風速と風向きの両方がParameter.Name列に表示されます。これらの値は、Local.Site.NameとDate.Local変数の両方によってキャストする必要があります。dcastでEPAの風速と風向データを作り直すR
一意のLocal.Site.Name + Date.Local行ごとに複数の観測値がある場合、それらの観測値の平均値が必要です。組み込みの引数 'fun.aggregate = mean'は風速には問題ありませんが、平均風向は値が度であるためこのように計算することはできません。たとえば、北(350、10)に近い2つの風向の平均は南(180)として出力されます。極平均値が360または0であるにもかかわらず、たとえば((350 + 10)/ 2 = 180)。
'循環型'パッケージでは、三角法を実行することなく平均風向きを計算できます。私は 'fun.aggregate'引数の中にこの追加機能を入れ子にしようとするのに問題があります。文がトリックを行うならば、私は他の単純なと思ったが、私は次のようなエラーに実行しています:
Error in vaggregate(.value = value, .group = overall, .fun = fun.aggregate, : could not find function ".fun"
In addition: Warning messages:
1: In if (wind$Parameter.Name == "Wind Direction - Resultant") { :
the condition has length > 1 and only the first element will be used
2: In if (wind$Parameter.Name == "Wind Speed - Resultant") { :
the condition has length > 1 and only the first element will be used
3: In mean.default(wind$"Wind Speed - Resultant") :
argument is not numeric or logical: returning NA
目標は、風速のためfun.aggregate = mean
を使用できるようにすることですが、風向についてmean(circular(Wind Direction, units = 'degrees')
。
は、ここで元のデータ(> 100メガバイト)です: https://drive.google.com/open?id=0By6o_bZ8CGwuUUhGdk9ONTgtT0E
はここでデータ(第一100行)のサブセットです: https://drive.google.com/open?id=0By6o_bZ8CGwucVZGT0pBQlFzT2M
ここに私のスクリプトです:
library(reshape2)
library(dplyr)
library(circular)
#read in the long format data:
wind <- read.csv("<INSERT_FILE_PATH_HERE>", header = TRUE)
#cast into wide format:
wind.w <- dcast(wind,
Local.Site.Name + Date.Local ~ Parameter.Name,
value.var = "Arithmetic.Mean",
fun.aggregate = (
if (wind$Parameter.Name == "Wind Direction - Resultant") {
mean(circular(wind$"Wind Direction - Resultant", units = 'degrees'))
}
else if (wind$Parameter.Name == "Wind Speed - Resultant") {
mean(wind$"Wind Speed - Resultant")
}),
na.rm = TRUE)
すべてのヘルプ大変感謝しています!
EDITを-spacedSparking
:HEREソリューションです:
library(reshape2)
library(SDMTools)
library(dplyr)
#read in the EPA wind data:
#This data is publicly accessible, and can be found here: https://aqsdr1.epa.gov/aqsweb/aqstmp/airdata/download_files.html
wind <- read.csv("daily_WIND_2016.csv", sep = ',', header = TRUE, stringsAsFactors = FALSE)
#convert long format wind speed data by date and site id:
wind_speed <- dcast(wind,
Local.Site.Name + Date.Local ~ Parameter.Name,
value.var = "Arithmetic.Mean",
fun.aggregate = function(x) {
mean(x, na.rm=TRUE)
},
subset = .(Parameter.Name == "Wind Speed - Resultant")
)
#convert long format wind direction data into wide format by date and local site id:
wind_direction <- dcast(wind,
Local.Site.Name + Date.Local ~ Parameter.Name,
value.var = "Arithmetic.Mean",
fun.aggregate = function(x) {
if(length(x) > 0)
circular.averaging(x, deg = TRUE)
else
-1
},
subset= .(Parameter.Name == "Wind Direction - Resultant")
)
#join the wide format split wind_speed and wind_direction dataframes
wind.w <- merge(wind_speed, wind_direction)
データファイルの先頭から最初の100行程度を切り取り、ここに投稿する必要があります。あなたの質問に答えたいと思っている人に106MBをダウンロードさせることは、ヘルパーの数を減らす責任があります。 – Richard
データを100行分トリムするようにしました。提案してくれてありがとう、私は新しいスタックです! – spacedSparking
これははるかに簡単ですが、この小さなデータセットで解決しようとしている問題がまだ示されていることを確認しましたか?あなたの目標は、あなたの質問を理解して答えられるように、できるだけアクセス可能なリソースを作ることです。 – Richard