##########################################################################################################################
# ------------------------------------------------- Data Processing ---------------------------------------------------- #
# R code related to                                                                                                      #
# Title: Plant diversity effects on forage quality, yield and revenues of semi-natural grasslands                        #
# Authors: Schaub. S., Finger, R., Leiber, F., Probst, S., Kreuzer, M., Weigelt, A., Buchmann, N., Scherer-Lorenzen, M.  #
##########################################################################################################################



#############################
#### I. table of contents
#############################

# 0. pre-settings
# 1. data manipulation
## 1.a interpolation (replication)
## 1.b compute quality-adjusted yield
## 1.c compute annual variables:
### 1.c.i   annual biomass yield
### 1.c.ii  annual average forage quality, 
### 1.c.iii annual quality-adjusted yield and
### 1.c.iv  annual revenues
## 1.d create CSV files for Stata  

# me = metabolizable energy, mpp = milk production potential, cp = crude protein, ucp = utilizable crude protein, 
# om = organic matter, ndf = neutral detergent fiber, bm = biomass


#############################
#### 0. pre-settings
#############################
# clear workspace: 
rm(list = ls())  

# set working directory (note this directory needs to be specified):
setwd("H:/Jena_Management_Experiment/Data_R_Stata_for_Submission")

# install and load packages:
# install.packages("tidyverse")

# load packages:
require(tidyverse)


#############################
#### 1. data manipulation
#############################

# load data (DOI xxx)
dat1 <-read.csv("schaub_etal_2019_data_jenamanagement.csv", header=T, sep=",") 



#----------------------------------------------------------------------------------------------------------
# a) interpolation (replication) 
#----------------------------------------------------------------------------------------------------------

# create scalas with days between 1. cut and X. cut of management intensities C4F100 and C4F200:
daysC2 <- 43  # number of days between first and second cut
daysC3 <- 92  # number of days between first and third cut
daysC4 <- 132 # number of days between first and last cut

dat1 <- dat1 %>% mutate(
  # i. computing slopes between first and last cut:
  slope_om  = ifelse(cuts>2,(om_content_last-om_content_first)/daysC4,NA),
  slope_ndf = ifelse(cuts>2,(ndf_content_last-ndf_content_first)/daysC4,NA),
  slope_cp  = ifelse(cuts>2,(cp_content_last-cp_content_first)/daysC4,NA),
  slope_me  = ifelse(cuts>2,(me_content_last-me_content_first)/daysC4,NA),
  slope_mpp = ifelse(cuts>2,(mpp_last-mpp_first)/daysC4,NA),
  
  # ii. linearly interpolating forage quality for 2. cut: 
  om_content_int1_test  = ifelse(cuts>2,om_content_first+slope_om*daysC2,NA),
  ndf_content_int1_test = ifelse(cuts>2,ndf_content_first+slope_ndf*daysC2,NA),
  cp_content_int1_test  = ifelse(cuts>2,cp_content_first+slope_cp*daysC2,NA),
  me_content_int1_test  = ifelse(cuts>2,me_content_first+slope_me*daysC2,NA),
  mpp_int1_test         = ifelse(cuts>2,mpp_first+slope_mpp*daysC2,NA),

  # ii. linearly interpolating forage quality for 3. cut:
  om_content_int2_test  = ifelse(cuts>2,om_content_first+slope_om*daysC3,NA),
  ndf_content_int2_test = ifelse(cuts>2,ndf_content_first+slope_ndf*daysC3,NA),
  cp_content_int2_test  = ifelse(cuts>2,cp_content_first+slope_cp*daysC3,NA),
  me_content_int2_test  = ifelse(cuts>2,me_content_first+slope_me*daysC3,NA),
  mpp_int2_test         = ifelse(cuts>2,mpp_first+slope_mpp*daysC3,NA))

# deleting interpolated test variables 
dat1 <- dat1 %>% select(-c(slope_om:mpp_int2_test))


#-----------------------------------------------------------------------------
# b) compute quality-adjusted yield (= biomass yield * forage quality)
#-----------------------------------------------------------------------------

# identify samples with very small biomass yield or with missing biomass yield information
delete <- dat1 %>% mutate(
                          bm_delete_c1 = ifelse((cuts==1 & is.na(bm_yield_last ))|(cuts==1 & bm_yield_last<=1 ),NA,1),
                          
                          bm_delete_c2 = ifelse((cuts==2 & is.na(bm_yield_first))|(cuts==2 & bm_yield_first<=1)|
                                                (cuts==2 & is.na(bm_yield_last ))|(cuts==2 & bm_yield_last<=1 ),NA,1),
                          
                          bm_delete_c4 = ifelse((cuts==4 & is.na(bm_yield_first))|(cuts==4 & bm_yield_first<=1)|
                                                (cuts==4 & is.na(bm_yield_int1 ))|(cuts==4 & bm_yield_int1 <=1)|
                                                (cuts==4 & is.na(bm_yield_int2 ))|(cuts==4 & bm_yield_int2 <=1)|
                                                (cuts==4 & is.na(bm_yield_last ))|(cuts==4 & bm_yield_last <=1),NA,1),
                          
                          bm_delete = bm_delete_c1*bm_delete_c2*bm_delete_c4) %>% 
  
                   filter(is.na(bm_delete)) %>% 
                   select(-c(bm_delete_c1:bm_delete))
              
# identify the plant diversity of samples that will be deleted
length((delete %>% filter(sowndiv==1))$sowndiv)
length((delete %>% filter(sowndiv==2))$sowndiv)
length((delete %>% filter(sowndiv==4))$sowndiv)
length((delete %>% filter(sowndiv==8))$sowndiv)
length((delete %>% filter(sowndiv==16))$sowndiv)
length((delete %>% filter(sowndiv==60))$sowndiv)

# extract sample code
code_delete <- delete$samplecode 

# delete observations from the data with very small biomass yield
dat1 <- dat1[ !(dat1$samplecode %in% code_delete), ]

# compute quality-adjusted yield:
dat1 <- dat1 %>% mutate(
  
  # om yield
  om_yield_first = bm_yield_first *  om_content_first/1000,
  om_yield_int1  = bm_yield_int1  *  om_content_int1/1000,
  om_yield_int2  = bm_yield_int2  *  om_content_int2/1000,
  om_yield_last  = bm_yield_last  *  om_content_last/1000,
  
  # ndf yield
  ndf_yield_first = bm_yield_first *  ndf_content_first/1000,
  ndf_yield_int1  = bm_yield_int1  *  ndf_content_int1/1000,
  ndf_yield_int2  = bm_yield_int2  *  ndf_content_int2/1000,
  ndf_yield_last  = bm_yield_last  *  ndf_content_last/1000,
  
  # cp yield
  cp_yield_first = bm_yield_first *  cp_content_first/1000,
  cp_yield_int1  = bm_yield_int1  *  cp_content_int1/1000,
  cp_yield_int2  = bm_yield_int2  *  cp_content_int2/1000,
  cp_yield_last  = bm_yield_last  *  cp_content_last/1000,
  
  # ucp yield
  ucp_yield_first = bm_yield_first *  ucp_content_first/1000,
  
  # me yield
  me_yield_first = bm_yield_first *  me_content_first/1000,
  me_yield_int1  = bm_yield_int1  *  me_content_int1/1000,
  me_yield_int2  = bm_yield_int2  *  me_content_int2/1000,
  me_yield_last  = bm_yield_last  *  me_content_last/1000,
  
  # mpp yield per m^2 
  mpp_yield_first = bm_yield_first *  mpp_first/1000,
  mpp_yield_int1  = bm_yield_int1  *  mpp_int1/1000,
  mpp_yield_int2  = bm_yield_int2  *  mpp_int2/1000,
  mpp_yield_last  = bm_yield_last  *  mpp_last/1000,
  
  # mpp yield per ha 
  mpp_yield_first_ha = mpp_yield_first*10000,
  mpp_yield_int1_ha  = mpp_yield_int1*10000,
  mpp_yield_int2_ha  = mpp_yield_int2*10000,
  mpp_yield_last_ha  = mpp_yield_last*10000)


#-----------------------------------------------------------------------------
# c) compute:
#    i.   annual biomass yield
#    ii.  annual average forage quality, 
#    iii. annual quality-adjusted yield and
#    iv.  annual revenues
#-----------------------------------------------------------------------------

dat1 <- dat1 %>% mutate(
  
  # i. annual biomass yield:
  bm_yield_year = ifelse(cuts==1 & !is.na(bm_yield_last), bm_yield_last,
                         ifelse(cuts==2 & !is.na(bm_yield_first) & !is.na(bm_yield_last), bm_yield_first+bm_yield_last,
                                 ifelse(cuts==4 & !is.na(bm_yield_first) & !is.na(bm_yield_int1)& !is.na(bm_yield_int2) & !is.na(bm_yield_last), bm_yield_first+bm_yield_int1+bm_yield_int2+bm_yield_last,
                                        NA))),
  
  # ii. annual average forage quality:
  
  # om content
  om_content_year = ifelse(cuts==1 & !is.na(om_content_last)  & !is.na(bm_yield_year), 
                           om_content_last,
                    ifelse(cuts==2 & !is.na(om_content_first) & !is.na(om_content_last) & !is.na(bm_yield_year),
                           om_content_first * (bm_yield_first/bm_yield_year) + om_content_last * (bm_yield_last/bm_yield_year), 
                    ifelse(cuts==4 & !is.na(om_content_first) & !is.na(om_content_int1) & !is.na(om_content_int2) & !is.na(om_content_last) & !is.na(bm_yield_year),
                           om_content_first*(bm_yield_first/bm_yield_year)+om_content_int1*(bm_yield_int1/bm_yield_year)+
                           om_content_int2 *(bm_yield_int2 /bm_yield_year)+om_content_last*(bm_yield_last/bm_yield_year),NA))),

  # ndf content
  ndf_content_year = ifelse(cuts==1 & !is.na(ndf_content_last)  & !is.na(bm_yield_year), 
                           ndf_content_last,
                     ifelse(cuts==2 & !is.na(ndf_content_first) & !is.na(ndf_content_last) & !is.na(bm_yield_year),
                           ndf_content_first * (bm_yield_first/bm_yield_year) + ndf_content_last * (bm_yield_last/bm_yield_year), 
                     ifelse(cuts==4 & !is.na(ndf_content_first) & !is.na(ndf_content_int1) & !is.na(ndf_content_int2) & !is.na(ndf_content_last) & !is.na(bm_yield_year),
                           ndf_content_first*(bm_yield_first/bm_yield_year)+ndf_content_int1*(bm_yield_int1/bm_yield_year)+
                           ndf_content_int2 *(bm_yield_int2 /bm_yield_year)+ndf_content_last*(bm_yield_last/bm_yield_year),NA))),
  
  # cp content
  cp_content_year = ifelse(cuts==1 & !is.na(cp_content_last)  & !is.na(bm_yield_year), 
                           cp_content_last,
                    ifelse(cuts==2 & !is.na(cp_content_first) & !is.na(cp_content_last) & !is.na(bm_yield_year),
                           cp_content_first * (bm_yield_first/bm_yield_year) + cp_content_last * (bm_yield_last/bm_yield_year), 
                    ifelse(cuts==4 & !is.na(cp_content_first) & !is.na(cp_content_int1) & !is.na(cp_content_int2) & !is.na(cp_content_last) & !is.na(bm_yield_year),
                           cp_content_first*(bm_yield_first/bm_yield_year)+cp_content_int1*(bm_yield_int1/bm_yield_year)+
                           cp_content_int2 *(bm_yield_int2 /bm_yield_year)+cp_content_last*(bm_yield_last/bm_yield_year),NA))),
  
  # me content
  me_content_year = ifelse(cuts==1 & !is.na(me_content_last)  & !is.na(bm_yield_year), 
                           me_content_last,
                    ifelse(cuts==2 & !is.na(me_content_first) & !is.na(me_content_last) & !is.na(bm_yield_year),
                           me_content_first * (bm_yield_first/bm_yield_year) + me_content_last * (bm_yield_last/bm_yield_year), 
                    ifelse(cuts==4 & !is.na(me_content_first) & !is.na(me_content_int1) & !is.na(me_content_int2) & !is.na(me_content_last) & !is.na(bm_yield_year),
                           me_content_first*(bm_yield_first/bm_yield_year)+me_content_int1*(bm_yield_int1/bm_yield_year)+
                           me_content_int2 *(bm_yield_int2 /bm_yield_year)+me_content_last*(bm_yield_last/bm_yield_year),NA))),
  
  # mpp
  mpp_year = ifelse(cuts==1 & !is.na(mpp_last)  & !is.na(bm_yield_year), 
                           mpp_last,
             ifelse(cuts==2 & !is.na(mpp_first) & !is.na(mpp_last) & !is.na(bm_yield_year),
                           mpp_first * (bm_yield_first/bm_yield_year) + mpp_last * (bm_yield_last/bm_yield_year), 
             ifelse(cuts==4 & !is.na(mpp_first) & !is.na(mpp_int1) & !is.na(mpp_int2) & !is.na(mpp_last) & !is.na(bm_yield_year),
                           mpp_first*(bm_yield_first/bm_yield_year)+mpp_int1*(bm_yield_int1/bm_yield_year)+
                           mpp_int2 *(bm_yield_int2 /bm_yield_year)+mpp_last*(bm_yield_last/bm_yield_year),NA))),
  
  
  # iii. annual quality-adjusted yield:
  
  # om yield
  om_yield_year = ifelse(cuts==1 & !is.na(om_yield_last), om_yield_last,
                         ifelse(cuts==2 & !is.na(om_yield_first) & !is.na(om_yield_last), om_yield_first+om_yield_last,
                                 ifelse(cuts==4 & !is.na(om_yield_first) & !is.na(om_yield_int1)& !is.na(om_yield_int2) & !is.na(om_yield_last), om_yield_first+om_yield_int1+om_yield_int2+om_yield_last,
                                        NA))),
  
  # ndf yield
  ndf_yield_year = ifelse(cuts==1 & !is.na(ndf_yield_last), ndf_yield_last,
                         ifelse(cuts==2 & !is.na(ndf_yield_first) & !is.na(ndf_yield_last), ndf_yield_first+ndf_yield_last,
                                 ifelse(cuts==4 & !is.na(ndf_yield_first) & !is.na(ndf_yield_int1)& !is.na(ndf_yield_int2) & !is.na(ndf_yield_last), ndf_yield_first+ndf_yield_int1+ndf_yield_int2+ndf_yield_last,
                                        NA))),
  
  # cp yield
  cp_yield_year = ifelse(cuts==1 & !is.na(cp_yield_last), cp_yield_last,
                         ifelse(cuts==2 & !is.na(cp_yield_first) & !is.na(cp_yield_last), cp_yield_first+cp_yield_last,
                                 ifelse(cuts==4 & !is.na(cp_yield_first) & !is.na(cp_yield_int1)& !is.na(cp_yield_int2) & !is.na(cp_yield_last), cp_yield_first+cp_yield_int1+cp_yield_int2+cp_yield_last,
                                        NA))),
  
  # me yield
  me_yield_year = ifelse(cuts==1 & !is.na(me_yield_last), me_yield_last,
                         ifelse(cuts==2 & !is.na(me_yield_first) & !is.na(me_yield_last), me_yield_first+me_yield_last,
                                 ifelse(cuts==4 & !is.na(me_yield_first) & !is.na(me_yield_int1)& !is.na(me_yield_int2) & !is.na(me_yield_last), me_yield_first+me_yield_int1+me_yield_int2+me_yield_last,
                                        NA))),
  
  # mpp yield
  mpp_yield_year = ifelse(cuts==1 & !is.na(mpp_yield_last), mpp_yield_last,
                         ifelse(cuts==2 & !is.na(mpp_yield_first) & !is.na(mpp_yield_last), mpp_yield_first+mpp_yield_last,
                                 ifelse(cuts==4 & !is.na(mpp_yield_first) & !is.na(mpp_yield_int1)& !is.na(mpp_yield_int2) & !is.na(mpp_yield_last), mpp_yield_first+mpp_yield_int1+mpp_yield_int2+mpp_yield_last,
                                        NA))),
  
  # mpp yield
  mpp_yield_year_ha = ifelse(cuts==1 & !is.na(mpp_yield_last_ha), mpp_yield_last_ha,
                          ifelse(cuts==2 & !is.na(mpp_yield_first_ha) & !is.na(mpp_yield_last_ha), mpp_yield_first_ha+mpp_yield_last_ha,
                                  ifelse(cuts==4 & !is.na(mpp_yield_first_ha) & !is.na(mpp_yield_int1_ha)& !is.na(mpp_yield_int2_ha) & !is.na(mpp_yield_last_ha), mpp_yield_first_ha+mpp_yield_int1_ha+mpp_yield_int2_ha+mpp_yield_last_ha,
                                         NA))),
  
  # iv. annual revenues:
  revenue_year = mpp_yield_year_ha * 31/100     # price: 31 Euro 100 kg^-1
)

#-----------------------------------------------------------------------------
# d) create CSV files for Stata  
#-----------------------------------------------------------------------------

# convert treatment into numeric factors:
dat1 <- dat1 %>% mutate(treatment = 
                          ifelse(treatment=="C1F0",1,
                                 ifelse(treatment=="C2F0",2,
                                        ifelse(treatment=="C2F100",3, 
                                               ifelse(treatment=="C4F100",4,5)))))

# set working directory (note this directory needs to be specified):
setwd("H:/Jena_Management_Experiment/Data_R_Stata_for_Submission/Stata_data_input")

# biomass yield
dat1 %>% select(c(samplecode:cuts),bm_yield_year) %>% filter(!is.na(bm_yield_year)) %>% write.csv('schaub_etal_2019_data_input_stata_bm_yield.csv', row.names = F)

# forage quality 
dat1 %>% select(c(samplecode:cuts),bm_yield_year,om_content_year) %>% filter(!is.na(bm_yield_year),!is.na(om_content_year)) %>% write.csv('schaub_etal_2019_data_input_stata_om_content.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,ndf_content_year) %>% filter(!is.na(bm_yield_year),!is.na(ndf_content_year)) %>% write.csv('schaub_etal_2019_data_input_stata_ndf_content.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,cp_content_year) %>% filter(!is.na(bm_yield_year),!is.na(cp_content_year)) %>% write.csv('schaub_etal_2019_data_input_stata_cp_content.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,ucp_content_first) %>% filter(!is.na(bm_yield_year),!is.na(ucp_content_first)) %>% write.csv('schaub_etal_2019_data_input_stata_ucp_content.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,me_content_year) %>% filter(!is.na(bm_yield_year),!is.na(me_content_year)) %>% write.csv('schaub_etal_2019_data_input_stata_me_content.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,mpp_year) %>% filter(!is.na(bm_yield_year),!is.na(mpp_year)) %>% write.csv('schaub_etal_2019_data_input_stata_mpp.csv', row.names = F)

# quality-adjusted yield
dat1 %>% select(c(samplecode:cuts),bm_yield_year,om_yield_year) %>% filter(!is.na(bm_yield_year),!is.na(om_yield_year)) %>% write.csv('schaub_etal_2019_data_input_stata_om_yield.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,ndf_yield_year) %>% filter(!is.na(bm_yield_year),!is.na(ndf_yield_year)) %>% write.csv('schaub_etal_2019_data_input_stata_ndf_yield.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,cp_yield_year) %>% filter(!is.na(bm_yield_year),!is.na(cp_yield_year)) %>% write.csv('schaub_etal_2019_data_input_stata_cp_yield.csv', row.names = F)
dat1 %>% filter(!is.na(bm_yield_year),!is.na(ucp_yield_first)) %>% select(c(samplecode:cuts),bm_yield_first,ucp_yield_first) %>% write.csv('schaub_etal_2019_data_input_stata_ucp_yield.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,me_yield_year) %>% filter(!is.na(bm_yield_year),!is.na(me_yield_year)) %>% write.csv('schaub_etal_2019_data_input_stata_me_yield.csv', row.names = F)
dat1 %>% select(c(samplecode:cuts),bm_yield_year,mpp_yield_year) %>% filter(!is.na(bm_yield_year),!is.na(mpp_yield_year)) %>% write.csv('schaub_etal_2019_data_input_stata_mpp_yield.csv', row.names = F)

# revenues
dat1 %>% select(c(samplecode:cuts),bm_yield_year,revenue_year) %>% filter(!is.na(bm_yield_year),!is.na(revenue_year)) %>% write.csv('schaub_etal_2019_data_input_stata_revenue.csv', row.names = F)

