library(dplyr) join = function (df_data_BH, df_data_NV, df_info_BH, df_info_NV) { if (!is.null(df_data_NV) & !is.null(df_data_BH)) { # Get the station in common common = levels(factor(df_info_NV[df_info_NV$code %in% df_info_BH$code,]$code)) # Get the Nv station to add NVadd = levels(factor(df_info_NV[!(df_info_NV$code %in% df_info_BH$code),]$code)) # Select only the NV info to add df_info_NVadd = df_info_NV[df_info_NV$code %in% NVadd,] # Join NV data to BH data df_info = full_join(df_info_BH, df_info_NVadd, by=c("code", "nom", "L93X", "L93Y", "surface_km2", "file_path")) # Select only the NV data to add df_data_NVadd = df_data_NV[df_data_NV$code %in% NVadd,] # Join NV info to BH info df_data = full_join(df_data_BH, df_data_NVadd, by=c("Date", "Qm3s", "code")) } else if (is.null(df_data_NV) & !is.null(df_data_BH)) { df_info = df_info_BH df_data = df_data_BH } else if (!is.null(df_data_NV) & is.null(df_data_BH)) { df_info = df_info_NV df_data = df_data_NV } else { stop('No data') } return (list(data=df_data, info=df_info)) } prepare = function(df_data, colnamegroup=NULL) { colnamegroup = c(colnamegroup) colindgroup = which(colnames(df_data) == colnamegroup) df_data = group_by_at(df_data, colindgroup) data = tibble(Date=df_data$Date, group=group_indices(df_data), Qm3s=df_data$Qm3s) Gkey = group_keys(df_data) info = bind_cols(group=seq(1:nrow(Gkey)), Gkey) return (list(data=data, info=info)) } reprepare = function(df_dataEx, df_list, colnamegroup=NULL) { colnames(df_dataEx) = c('Date', 'group', 'Qm3s') df_dataEx$Date = as.character(df_dataEx$Date) exDate = df_dataEx$Date[1] nbt = lengths(regmatches(exDate, gregexpr('-', exDate))) if (nbt == 1) { df_dataEx$Date = paste(df_dataEx$Date, '01', sep='-') } else if (nbt == 0) { df_dataEx$Date = paste(df_dataEx$Date, '01', '01', sep='-') } else if (nbt != 2) { stop('erreur of date format') } df_dataEx = bind_cols(Date=as.Date(df_dataEx$Date, format="%Y-%m-%d"), df_dataEx[-1], df_list$info[df_dataEx$group, 2:ncol(df_list$info)]) df_listEx = prepare(df_dataEx, colnamegroup=colnamegroup) return (df_listEx) } clean = function (df_xTrend, df_list) { df_xTrend = bind_cols(df_xTrend, df_list$info[df_xTrend$group1, 2:ncol(df_list$info)]) colnames(df_xTrend)[1] = 'group' return (df_xTrend) }