Ich habe eine Reihe von Tageswerten der gerasterten Meeresoberflächentemperatur seit 34 Jahren (12418 Tagesakten x 4248 Punkte) und vortäuschen, wöchentliche Werte zu berechnen. Es ist mir fast gelungen, diesem Beitrag zu folgen https://stackoverflow.com/a/15102394/709777. Aber es gibt einige Unstimmigkeiten zwischen Daten und Wochen. Ich kann den Punkt nicht finden und ich möchte sicher sein, dass ich die richtigen Daten bekomme, um den Wochendurchschnitt zu berechnen.R wöchentlich im Durchschnitt
Ich benutze dieses Stück meiner R Skript täglich um Daten zu lesen und einen großen Datenrahmen zu bauen, die alle Tageswerte von einem einzigen Punkt enthält in einer Spalte (12418 Zeilen/Tag von 4248 Spalten/Temperatur)
# Paths
ruta_datos_diarios<-"/home/meteo/PROJECTES/VERSUS/DATA/SST/CSV/"
ruta_files<-"/home/meteo/PROJECTES/VERSUS/SCRIPTS/CLUSTER/FILES/"
ruta_eixida<-"/home/meteo/PROJECTES/VERSUS/OUTPUT/DATA/SEMANAL/"
# List of daily files
files <- list.files(path = ruta_datos_diarios, pattern = "SST-diaria-MED")
output <- matrix(ncol=4248, nrow=length(files))
fechas <- matrix(ncol=1, nrow=length(files))
for (i in 1:length(files)){
# read data
datos<-read.csv(paste0(ruta_datos_diarios,files[i],sep=""),header=TRUE,na.strings = "NA")
datos<-datos[complete.cases(datos),]
# Extract dates from daily file names
yyyy<-substr(files[i],16,19)
mm<-substr(files[i],20,21)
dd<-substr(files[i],22,23)
dates[i,]<-paste0(yyyy,"-",mm,"-",dd,sep="")
output[i,]<-t(datos$sst)
}
datos.df<-as.data.frame(output)
# Build a dataframe with the dates (day, week and year)
fechas<-as.data.frame(fechas)
fechas$V1<-as.Date(fechas$V1)
fechas$Week <- week(fechas$V1)
fechas$Year <- year(fechas$V1)
# Extract day of the week (Saturday = 6)
fechas$Week_Day <- as.numeric(format(fechas$V1, format='%w'))
# Adjust end-of-week date (first saturday from the original Date)
fechas$End_of_Week <- fechas$V1 + (6 - fechas$Week_Day)
# new dataframe from End_of_Week
fechas.semana<-fechas[!duplicated(fechas$End_of_Week),]
fechas.semana<-as.data.frame(fechas.semana)
colnames(fechas)<-c("Day","Week","Year","Week_Day","End_of_Week")
colnames(fechas.semana)<-c("Day","Week","Year","Week_Day","End_of_Week")
So lese ich meine Daten und Daten. Um ein kurzes Beispiel zu behalten, habe ich eine Teilmenge des Datenrahmens in dieser Datei temp-sst.csv (1000 Obs. Von 10 Variablen, einschließlich "Day", "Week", "Year", "Week_Day", "End_of_Week") gespeichert.
sst.dat <- read.csv("temp-dat.csv",header=TRUE)
# Join dates and SST values
sst.dat <- cbind(fechas, sst.dat)
# Build new dates data frame
fechas<-as.data.frame(sst.dat$Day)
colnames(fechas)<-c("Day")
fechas$Day<-as.Date(fechas$Day)
fechas$Week <- week(fechas$Day)
fechas$Year <- year(fechas$Day)
# Extract day of the week (Saturday = 6)
fechas$Week_Day <- as.numeric(format(fechas$Day, format='%w'))
# Adjust end-of-week date (first saturday from the original Date)
fechas$End_of_Week <- fechas$Day + (6 - fechas$Week_Day)
fechas.semana<-fechas[!duplicated(fechas$End_of_Week),]
fechas.semana<-as.data.frame(fechas.semana)
colnames(fechas)<-c("Day","Week","Year","Week_Day","End_of_Week")
colnames(fechas.semana)<-c("Day","Week","Year","Week_Day","End_of_Week")
# Weekly aggregation function from the referred post
media.semanal <- function(x, column){
a<-aggregate(x[,column]~End_of_Week+Year, FUN=mean, data=x, na.rm=TRUE)
colnames(a)<-c("End_of_Week","Year","SSTmean")
return(a)
}
# Matrix to be populated by weekly function
SST.mat<-matrix(nrow=nrow(fechas.semana), ncol=length(sst.dat)-5) # 5 son las columnas de fecha
for (j in 6:length(sst.dat)){ # comienza en 6 para evitar las columnas de fecha
b<-media.semanal(sst.dat,j)
SST.mat[,j-5]<-b$SSTmean
}
Aber hier kommt das Problem. "b" Datenrahmen von der Schleife hat 145 Zeilen, während SST.mat und fechas.semana nur 144 haben. Ich habe den Punkt nicht gefunden, wo diese Meinungsverschiedenheit kommt.
Jede Hilfe würde sehr geschätzt werden, ich bin hier fest. Dank
"_To eine kurze example_ halten" - statt einen Link zu einer auf Dropbox 1000 * 10-Datei veröffentlichen, sollten Sie eine _minimal_, in sich geschlossene sorgen Beispiel. – Henrik
Sie haben Recht @henrik, hilfreiche Flagge ausgelöst – pacomet