긴 형식의 바람 데이터를 와이드 형식으로 변환하려고합니다. 풍속과 풍향 모두 Parameter.Name 열에 나열됩니다. 이 값은 Local.Site.Name 및 Date.Local 변수에서 모두 캐스팅해야합니다.dcast로 EPA 풍속 및 방향 데이터를 R 모양으로 바꿈
고유 한 Local.Site.Name + Date.Local 행당 여러 개의 관찰이있는 경우 해당 관측치의 평균값을 원합니다. built-in argument 'fun.aggregate = mean'은 풍속은 괜찮지 만 평균 바람 방향은 값이도 단위이기 때문에 이런 식으로 계산할 수 없습니다. 예를 들어 북쪽 (350, 10) 근처의 두 풍향의 평균은 남쪽 (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')
을 사용할 수 있도록하는 것입니다.
가 여기에 원본 데이터의 (> 1백메가바이트) : 여기 https://drive.google.com/open?id=0By6o_bZ8CGwuUUhGdk9ONTgtT0E
데이터의 하위 집합 (1 100 행) :
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)
어떤 도움 : https://drive.google.com/open?id=0By6o_bZ8CGwucVZGT0pBQlFzT2M
여기 내 스크립트입니다 대단히 감사하겠습니다!
편집을 -spacedSparking : 여기에 해결책이있다 :
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