Обновление: функции данных моей метеостанции NOAA GHCN-Daily были очищены и объединены в пакет rnoaa, доступный в CRAN или здесь: https://github.com/ropensci/rnoaa
Я разрабатываю функцию R для расчета статистики по набору данных, состоящему из нескольких кадров данных. Короче говоря, я хочу получить фреймы данных по классам на основе эталонного фрейма данных, содержащего имена. Затем я хочу применить статистические функции к значениям показателей, перечисленных для каждого заданного дня. По сути, я хочу вызвать, а затем наложить список фреймов данных для вычисления функций вектора значений для каждой уникальной даты и метрики, где значения не являются NA.
Кадры данных итеративно считываются в рабочую область из файла на основе переменной класса с использованием функции «by». После импорта файлов для данного класса я хочу rbind() фреймы данных для этого класса и каждой определяемой пользователем метрики в пределах диапазона лет. Затем я хочу применить конкатенацию предоставленных пользователем статистических функций к каждой метрике в классе, которая соответствует заданному значению для года, месяца и дня (т. е. средняя [функция] низкая температура [класс] 1 июля, 1990 [дата] сообщается во всех местоположениях [кадры данных] в заданном регионе [класс]. Я хочу, чтобы конечным результатом были новые кадры данных, содержащие значения для каждой даты в регионе и диапазон лет для каждой метрики и статистической функции. Я очень близок к получению этого результата с помощью функции агрегата(), но у меня возникают проблемы с получением разумных результатов из функции агрегата, которая в настоящее время выводит 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() работает правильно, и почему функцияaggregation() выводит NA и NaN для такого количества показателей. Я был обеспокоен тем, что фреймы данных не были связаны друг с другом или что пропущенные значения плохо обрабатывались некоторыми статистическими функциями. Заранее благодарим вас за любой совет, который вы можете предложить.
Ваше здоровье,
Адам
<<-
является глобальным назначением. Это законная, но крайне нежелательная функция. - person Señor O   schedule 27.07.2013