library(zoo) # time series analysis library(tidyverse) # fast, consistent tool for working with data frame like objects library(readxl) library(WriteXLS) library(lubridate) # Data import from every weather station { Ihlow70 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G0F5390 16Okt17-1441.xls") Ihlow35 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G0F5391 16Okt17-1451.xls") Ihlow0 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G0F5392 16Okt17-1358.xls") Ihlow15 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G0F5393 16Okt17-1423.xls") Ihlow30 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G0F5394 16Okt17-1446.xls") Elisenhof30 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/Device-5G106267_conflict-20170721-100438.xls", na ="***") ### anderes Format Elisenhof15 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G106268 16Okt17-1430.xls") Elisenhof0 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G106269 16Okt17-1351.xls") Elisenhof35 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G106270 16Okt17-1405.xls") Elisenhof70 <- read_excel("~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/FullData/5G106296 16Okt17-1436.xls") } # One weather station had a different data format so it had to be handled differently Elisenhof30$`Date/Time` <- as.POSIXct(Elisenhof30$`Date/Time`, format = "%d/%b/%Y %H:%M") # Two Station IDs were mixed up by mistake after reinstalling them after ploughing so data has to be rearranged colnames(Elisenhof15) <- c("Date.Time","SoilMoist", "SoilTemp", "RelHum", "AirTemp","AirPress", "SolarRad", "WindAvg","WindMax", "WindDir", "Prec") colnames(Elisenhof30) <- c("Date.Time", "SoilTemp", "SoilMoist", "AirPress", "RelHum", "AirTemp", "SolarRad", "WindDir", "WindMax", "WindAvg", "Prec") E15alsE30 <- subset(Elisenhof15, Date.Time >= '2016-10-25 13:00') E15alsE15 <- subset(Elisenhof15, Date.Time <= '2016-10-25 13:00') E30alsE15 <- subset(Elisenhof30, Date.Time >= '2016-10-25 13:00') E30alsE30 <- subset(Elisenhof30, Date.Time <= '2016-10-25 13:00') Elisenhof30 <- rbind(E30alsE30, E15alsE30) Elisenhof15 <- rbind(E15alsE15, E30alsE15) rm(E15alsE15, E15alsE30, E30alsE15, E30alsE30) # Header converting to make it easier accesible { colnames(Ihlow70) <- c("Date.Time","SoilMoist70", "SoilTemp70", "RelHum70", "AirTemp70","AirPress70", "SolarRad70", "WindAvg70","WindMax70", "WindDir70", "Prec70") colnames(Ihlow35) <- c("Date.Time","SoilMoist35", "SoilTemp35", "RelHum35", "AirTemp35","AirPress35", "SolarRad35", "WindAvg35","WindMax35", "WindDir35", "Prec35") colnames(Ihlow0) <- c("Date.Time","SoilMoist0", "SoilTemp0", "RelHum0", "AirTemp0","AirPress0", "SolarRad0", "WindAvg0","WindMax0", "WindDir0", "Prec0") colnames(Ihlow15) <- c("Date.Time","SoilMoist15", "SoilTemp15", "RelHum15", "AirTemp15","AirPress15", "SolarRad15", "WindAvg15","WindMax15", "WindDir15", "Prec15") colnames(Ihlow30) <- c("Date.Time","SoilMoist30", "SoilTemp30", "RelHum30", "AirTemp30","AirPress30", "SolarRad30", "WindAvg30","WindMax30", "WindDir30", "Prec30") colnames(Elisenhof70) <- c("Date.Time","SoilMoist70", "SoilTemp70", "RelHum70", "AirTemp70","AirPress70", "SolarRad70", "WindAvg70","WindMax70", "WindDir70", "Prec70") colnames(Elisenhof35) <- c("Date.Time","SoilMoist35", "SoilTemp35", "RelHum35", "AirTemp35","AirPress35", "SolarRad35", "WindAvg35","WindMax35", "WindDir35", "Prec35") colnames(Elisenhof0) <- c("Date.Time","SoilMoist0", "SoilTemp0", "RelHum0", "AirTemp0","AirPress0", "SolarRad0", "WindAvg0","WindMax0", "WindDir0", "Prec0") colnames(Elisenhof15) <- c("Date.Time","SoilMoist15", "SoilTemp15", "RelHum15", "AirTemp15","AirPress15", "SolarRad15", "WindAvg15","WindMax15", "WindDir15", "Prec15") colnames(Elisenhof30) <- c("Date.Time", "SoilTemp30", "SoilMoist30", "AirPress30", "RelHum30", "AirTemp30", "SolarRad30", "WindDir30", "WindMax30", "WindAvg30", "Prec30") } # Date converting # Subsetting data - beginning 15th of June 2016 # Make values NA for the harvest period where the stations where not in their place on the agricultural field I70 <- subset(Ihlow70, Date.Time >= as.POSIXct('2016-06-15 00:00')) I35 <- subset(Ihlow35, Date.Time >= as.POSIXct('2016-06-15 00:00')) I0 <- subset(Ihlow0, Date.Time >= as.POSIXct('2016-06-15 00:00')) I15 <- subset(Ihlow15, Date.Time >= as.POSIXct('2016-06-15 00:00')) for (i in 1:length(I15$Date.Time)) { if ((I15$Date.Time[i] >= '2016-07-13 00:00') & (I15$Date.Time[i] <= '2016-08-19 00:00') | (I15$Date.Time[i] >= '2016-09-13 00:00') & (I15$Date.Time[i] <= '2016-10-24 00:00')) { I15[i,-1] <- NA } } I30 <- subset(Ihlow30, Date.Time >= as.POSIXct('2016-06-15 00:00')) for (i in 1:length(I30$Date.Time)) { if ((I30$Date.Time[i] >= '2016-07-13 00:00') & (I30$Date.Time[i] <= '2016-08-19 00:00') | (I30$Date.Time[i] >= '2016-09-13 00:00') & (I30$Date.Time[i] <= '2016-10-24 00:00')) { I30[i,-1] <- NA } } E70 <- subset(Elisenhof70, Date.Time >= as.POSIXct('2016-06-15 00:00')) E35 <- subset(Elisenhof35, Date.Time >= as.POSIXct('2016-06-15 00:00')) E0 <- subset(Elisenhof0, Date.Time >= as.POSIXct('2016-06-15 00:00')) E15 <- subset(Elisenhof15, Date.Time >= as.POSIXct('2016-06-15 00:00')) for (i in 1:length(E15$Date.Time)) { if ((E15$Date.Time[i] >= '2016-07-12 00:00') & (E15$Date.Time[i] <= '2016-10-25 00:00')) { E15[i,-1] <- NA } } E30 <- subset(Elisenhof30, Date.Time >= as.POSIXct('2016-06-15 00:00')) for (i in 1:length(E30$Date.Time)) { if ((E30$Date.Time[i] >= '2016-07-12 00:00') & (E30$Date.Time[i] <= '2016-10-25 00:00')) { E30[i,-1] <- NA } } rm(Elisenhof0, Elisenhof70, Elisenhof15, Elisenhof30, Elisenhof35) rm(Ihlow0, Ihlow15, Ihlow30, Ihlow35, Ihlow70) # Subsetting data - ending in 17th of July 2017 I70 <- subset(I70, Date.Time <= as.POSIXct('2017-07-17 00:00')) I35 <- subset(I35, Date.Time <= as.POSIXct('2017-07-17 00:00')) I0 <- subset(I0, Date.Time <= as.POSIXct('2017-07-17 00:00')) I15 <- subset(I15, Date.Time <= as.POSIXct('2017-07-17 00:00')) I30 <- subset(I30, Date.Time <= as.POSIXct('2017-07-17 00:00')) E70 <- subset(E70, Date.Time <= as.POSIXct('2017-07-17 00:00')) E35 <- subset(E35, Date.Time <= as.POSIXct('2017-07-17 00:00')) E0 <- subset(E0, Date.Time <= as.POSIXct('2017-07-17 00:00')) E15 <- subset(E15, Date.Time <= as.POSIXct('2017-07-17 00:00')) E30 <- subset(E30, Date.Time <= as.POSIXct('2017-07-17 00:00')) # Change times from CEST to CET and correct dates due to logger manuals and incoherent time zones while measuring # two loggers had completly wrong time zones for (i in 1:length(E30$Date.Time)) { if ((E30$Date.Time[i] >= '2016-06-15 00:00') & (E30$Date.Time[i] <= '2016-10-01 00:00')) { E30$Date.Time[i] <- c(E30$Date.Time[i] - hours(7)) } } for (i in 1:length(E15$Date.Time)) { if ((E15$Date.Time[i] >= '2016-10-25 00:00') & (E15$Date.Time[i] <= '2017-08-01 00:00')) { E15$Date.Time[i] <- c(E15$Date.Time[i] - hours(7)) } } for (i in 1:length(E15$Date.Time)) { if ((E15$Date.Time[i] >= '2016-11-06 00:00') & (E15$Date.Time[i] <= '2017-01-11 00:00')) { E15$Date.Time[i] <- c(E15$Date.Time[i] - hours(1)) } } # CEST to CET -1 for (i in 1:length(E30$Date.Time)) { if ((E30$Date.Time[i] >= '2016-06-15 00:00') & (E30$Date.Time[i] <= '2016-10-02 00:00') | (E30$Date.Time[i] >= '2016-10-26 00:00') & (E30$Date.Time[i] <= '2017-01-10 00:00') | (E30$Date.Time[i] >= '2017-04-04 00:00') & (E30$Date.Time[i] <= '2017-08-01 00:00') ) { E30$Date.Time[i] <- c(E30$Date.Time[i] - hours(1)) } } for (i in 1:length(E15$Date.Time)) { if ((E15$Date.Time[i] >= '2016-06-15 00:00') & (E15$Date.Time[i] <= '2017-03-13 00:00') | (E15$Date.Time[i] >= '2017-03-21 00:00') & (E15$Date.Time[i] <= '2017-08-01 00:00')) { E15$Date.Time[i] <- c(E15$Date.Time[i] - hours(1)) } } for (i in 1:length(E0$Date.Time)) { if ((E0$Date.Time[i] >= '2016-06-15 00:00') & (E0$Date.Time[i] <= '2016-11-01 00:00') | (E0$Date.Time[i] >= '2017-03-27 00:00') & (E0$Date.Time[i] <= '2017-07-15 00:00') ) { E0$Date.Time[i] <- c(E0$Date.Time[i] - hours(1)) } } for (i in 1:length(E35$Date.Time)) { if ((E35$Date.Time[i] >= '2016-06-15 00:00') & (E35$Date.Time[i] <= '2016-11-01 00:00') | (E35$Date.Time[i] >= '2017-03-27 00:00') & (E35$Date.Time[i] <= '2017-07-15 00:00') ) { E35$Date.Time[i] <- c(E35$Date.Time[i] - hours(1)) } } for (i in 1:length(E70$Date.Time)) { if ((E70$Date.Time[i] >= '2016-06-15 00:00') & (E70$Date.Time[i] <= '2016-11-01 00:00') | (E70$Date.Time[i] >= '2017-03-27 00:00') & (E70$Date.Time[i] <= '2017-07-15 00:00') ) { E70$Date.Time[i] <- c(E70$Date.Time[i] - hours(1)) } } for (i in 1:length(I30$Date.Time)) { if ((I30$Date.Time[i] >= '2016-12-15 00:00') & (I30$Date.Time[i] <= '2017-08-15 00:00')) { I30$Date.Time[i] <- c(I30$Date.Time[i] - hours(1)) } } for (i in 1:length(I30$Date.Time)) { if ((I30$Date.Time[i] >= '2017-03-27 00:00') & (I30$Date.Time[i] <= '2017-04-17 00:00')) { I30$Date.Time[i] <- c(I30$Date.Time[i] - hours(1)) } } for (i in 1:length(I15$Date.Time)) { if((I15$Date.Time[i] >= '2017-04-21 00:00') & (I15$Date.Time[i] <= '2017-08-01 00:00')) { I15$Date.Time[i] <- c(I15$Date.Time[i] - hours(1)) } } for (i in 1:length(I15$Date.Time)) { if((I15$Date.Time[i] >= '2017-03-27 00:00') & (I15$Date.Time[i] <= '2017-04-21 00:00')) { I15$Date.Time[i] <- c(I15$Date.Time[i] - hours(1)) } } for (i in 1:length(I0$Date.Time)) { if ((I0$Date.Time[i] >= '2016-11-14 00:00') & (I0$Date.Time[i] <= '2017-03-03 00:00') | (I0$Date.Time[i] >= '2017-03-25 00:00') & (I0$Date.Time[i] <= '2017-04-20 00:00') ) { I0$Date.Time[i] <- c(I0$Date.Time[i] - hours(1)) } } for (i in 1:length(I35$Date.Time)) { if ((I35$Date.Time[i] >= '2016-11-14 00:00') & (I35$Date.Time[i] <= '2016-12-21 00:00') | (I35$Date.Time[i] >= '2017-03-26 00:00') & (I35$Date.Time[i] <= '2017-04-20 00:00') ) { I35$Date.Time[i] <- c(I35$Date.Time[i] - hours(1)) } } for (i in 1:length(I70$Date.Time)) { if ((I70$Date.Time[i] >= '2017-03-26 00:00') & (I70$Date.Time[i] <= '2017-04-20 00:00') | (I70$Date.Time[i] >= '2017-05-04 00:00') & (I70$Date.Time[i] <= '2017-08-01 00:00') ) { I70$Date.Time[i] <- c(I70$Date.Time[i] - hours(1)) } } # Add distances for statistical analyses I70$Dist70 <- as.numeric(rep('-70',nrow(I70))) I35$Dist35 <- as.numeric(rep('-35',nrow(I35))) I0$Dist0 <- as.numeric(rep('0',nrow(I0))) I15$Dist15 <- as.numeric(rep('15',nrow(I15))) I30$Dist30 <- as.numeric(rep('30',nrow(I30))) E70$Dist70 <- as.numeric(rep('-70',nrow(E70))) E35$Dist35 <- as.numeric(rep('-35',nrow(E35))) E0$Dist0 <- as.numeric(rep('0',nrow(E0))) E15$Dist15 <- as.numeric(rep('15',nrow(E15))) E30$Dist30 <- as.numeric(rep('30',nrow(E30))) # Transforming precipitation # In forest, 1 tip measures 100 ml per 2m^2 which has to be devided by 20 to get mm I0$Prec0 <- I0$Prec0/20 I35$Prec35 <- I35$Prec35/20 I70$Prec70 <- I70$Prec70/20 E0$Prec0 <- E0$Prec0/20 E35$Prec35 <- E35$Prec35/20 E70$Prec70 <- E70$Prec70/20 # In agricultural field, 1 tip measures 0,2 mm which has to be devided by 5 to get 1 mm I15$Prec15 <- I15$Prec15/5 I30$Prec30 <- I30$Prec30/5 E15$Prec15 <- E15$Prec15/5 E30$Prec30 <- E30$Prec30/5 # Deleting strong outliers that made no sence E0$Prec0[E0$Prec0 == 22.15] <- NA E15$Prec15[E15$Prec15 == 79.8] <- NA E30$RelHum30[E30$RelHum30 == 4.8326421] <- NA # Making 0 values NA for precipitation E0$Prec0[E0$Prec0 == 0] <- NA E15$Prec15[E15$Prec15 == 0] <- NA E30$Prec30[E30$Prec30 == 0] <- NA E35$Prec35[E35$Prec35 == 0] <- NA E70$Prec70[E70$Prec70 == 0] <- NA I0$Prec0[I0$Prec0 == 0] <- NA I15$Prec15[I15$Prec15 == 0] <- NA I30$Prec30[I30$Prec30 == 0] <- NA I35$Prec35[I35$Prec35 == 0] <- NA I70$Prec70[I70$Prec70 == 0] <- NA # Merging for Distance with same Dates { ElisenhofWithDistMerged <- merge(E70, E35, by.x = "Date.Time", by.y = "Date.Time") ElisenhofWithDistMerged <- merge(ElisenhofWithDistMerged, E0, by.x = "Date.Time", by.y = "Date.Time") ElisenhofWithDistMerged <- merge(ElisenhofWithDistMerged, E15, by.x = "Date.Time", by.y = "Date.Time") ElisenhofWithDistMerged <- merge(ElisenhofWithDistMerged, E30, by.x = "Date.Time", by.y = "Date.Time") IhlowWithDistMerged <- merge(I70, I35, by.x = "Date.Time", by.y = "Date.Time") IhlowWithDistMerged <- merge(IhlowWithDistMerged, I0, by.x = "Date.Time", by.y = "Date.Time") IhlowWithDistMerged <- merge(IhlowWithDistMerged, I15, by.x = "Date.Time", by.y = "Date.Time") IhlowWithDistMerged <- merge(IhlowWithDistMerged, I30, by.x = "Date.Time", by.y = "Date.Time") } # Merging only for Distance E <- full_join(E70, E35) E <- full_join(E, E0) E <- full_join(E, E15) E <- full_join(E, E30) I <- full_join(I70, I35) I <- full_join(I, I0) I <- full_join(I, I15) I <- full_join(I, I30) # Data export { # Microclimate WriteXLS::WriteXLS(ElisenhofWithDistMerged, "~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/ElisenhofWithDistMerged.xls") WriteXLS::WriteXLS(IhlowWithDistMerged, "~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/IhlowWithDistMerged.xls") WriteXLS::WriteXLS(E, "~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/Elisenhof.xls") WriteXLS::WriteXLS(I, "~/owncloud/ZALF/3 Carbon, Nitrogen and Microclimate/Data/Ihlow.xls") }