Hello à tous,
Je suis nouveau sur ce forum est nouvel utilisateur de R. Je débute tout juste et sur le tas ! Pour contextualiser, je suis actuellement en stage et on m'a donné pour mission d'optimiser un script R (je n'ai jamais faitde codage, je suis économiste de formation). Concrètement je dois générer la matrice une fois, l'enregistrer pour de bon et faire tourner le reste du script avec pour base cette matrice. Il faut donc que je casse la boucle. Je patauge complètement depuis le début, j'essaye dans un premier temps de comprendre ce qui a été fait ligne par ligne en tentant de repérer la boucle... Si quelqu'un veux bien venir m'aider avant de perdre espoir d'y parvenir un jour !
Merci pour votre aide :)
rm(list=ls())
#Charger les librairies
#setwd('/Users/spare/OneDrive/Bureau/R/Merits')
library(tidyverse)
library(readr)
library(dplyr)
library(lubridate)
library(magrittr)
library(stringr)
library(tidyr)
library(rlist)
library(readxl)
#Importation des donnÈes
UIC <- read_excel("/home/laurent/Documents/MODUS/Merits_UIC code_NUTS2-NUTS3.xlsx")
POR2016 <- read.csv("/home/laurent/Documents/MODUS/2016/SKDUPD_POR.csv", header=FALSE)
TRAIN2016 <- read_csv("/home/laurent/Documents/MODUS/2016/SKDUPD_TRAIN.csv",
col_names = FALSE, col_types = cols(X11 = col_character()))
UIC <- UIC[,c(1:6)]
#Preparation de la table POR
colnames(POR2016)[1] <- "ID"
colnames(POR2016)[2] <- "Position"
colnames(POR2016)[3] <- "UIC_Code"
colnames(POR2016)[4] <- "Arrival"
colnames(POR2016)[5] <- "Arrival_change_day"
colnames(POR2016)[6] <- "Departure"
colnames(POR2016)[7] <- "Departure_change_day"
colnames(POR2016)[8] <- "Arrival_location"
colnames(POR2016)[9] <- "Departure_location"
colnames(POR2016)[10] <- "Local_fuction"
colnames(POR2016)[11] <- "TFR"
POR2016 <- POR2016[,-c(5:5,8:11,7:7)]
# Fusion des tables UIC et POR
POR2016 <- left_join(POR2016,UIC,by="UIC_Code")
part_datPOR <- POR2016
#Supprimer UIC manquants ou Ègaux ‡ 0
part_datPOR <- part_datPOR %>% filter(!is.na(NUT2))
part_datPOR <- part_datPOR %>% filter(NUT2!=0)
max_ID <- max(part_datPOR$ID)
# Supprimer les trajets intermÈdiaires
Test <- part_datPOR %>%
group_by(ID) %>%
slice(c(which.min(Position), which.max(Position)))
View(Test)
# crÈation de 2 sous bases
Test1 <- filter(Test,Position > 1)
#View(Test1)
Test1 <- Test1[,-c(5:5)]
Test2 <- filter(Test,Position == 1)
colnames(Test2)[3] <- "Code_UIC_Departure"
#View(Test2)
Test2 <- Test2[,-c(2:2, 4:4)]
#View(Test2)
# Fusion des 2 sous bases
POR2016Final <- left_join(Test1,Test2, by ="ID")
#View(POR2016Final)
colnames(POR2016Final)[2] <- "Nb_Arrets"
# Supprimer les NUTS manquants
POR2016Final <- POR2016Final %>% filter(!is.na(NUT2.x))
POR2016Final <- POR2016Final %>% filter(!is.na(NUT2.y))
POR2016Final <- POR2016Final %>% filter(NUT2.x!=0)
POR2016Final <- POR2016Final %>% filter(NUT2.y!=0)
#View(POR2016Final)
# PrÈparation de la table Train
colnames(TRAIN2016)[1] <- "ID"
colnames(TRAIN2016)[2] <- "Service_number"
colnames(TRAIN2016)[3] <- "Service_characteristic"
colnames(TRAIN2016)[4] <- "Pricing_category"
colnames(TRAIN2016)[5] <- "Service_mode"
colnames(TRAIN2016)[6] <- "Service_provider"
colnames(TRAIN2016)[7] <- "Information_provider"
colnames(TRAIN2016)[8] <- "Reservation_compagny"
colnames(TRAIN2016)[9] <- "Beginning_date"
colnames(TRAIN2016)[10] <- "End_date"
colnames(TRAIN2016)[11] <- "Circulation_days"
colnames(TRAIN2016)[12] <- "Equipment"
colnames(TRAIN2016)[13] <- "RFR_number"
max_IDT <- max(TRAIN2016$ID)
max_IDT
part_dat <- TRAIN2016
# Fusion des tables Train et Por
part_dat <- left_join(TRAIN2016,POR2016Final, by = "ID")
part_dat <- part_dat %>% filter(!is.na(NUT2.x))
#View(part_dat)
#part_dat <- slice(part_dat,1:100)
#View(part_dat)
# CrÈation du data frame
df<-data.frame(part_dat)
# Calcul de la longueur du vecteur
df$Nb_day <- nchar(df$Circulation_days)
# Multiplication des lignes par la longueur du vecteur
df <- df[rep(row.names(df), df$Nb_day),]
#View(df)
# Boucle pour : extraire les 1 et 0 et les placer ‡ leur dates respectives puis filter sur circule =1
lw <- list()
for (i in df$ID) {
lw[[i]] <- filter(df,df$ID==i)
lw[[i]]$Day <- seq(from=1, to=lw[[i]]$Nb_day[1])
lw[[i]]$Circule <- substr(lw[[i]]$Circulation_days, lw[[i]]$Day,lw[[i]]$Day)
lw[[i]]$Date <- seq.Date(from=lw[[i]]$Beginning_date[1], to=lw[[i]]$End_date[1], by="day")
lw[[i]] <- filter(lw[[i]],lw[[i]]$Circule==1)
}
Merits2016 <- list.rbind(lw)
# ajouter les jours
Merits2016 <- mutate(Merits2016, Week_day= wday(Merits2016$Date, label = TRUE, abbr = FALSE, locale = Sys.getlocale("LC_TIME")))
Merits2016 <- Merits2016[,-c(11:11)]
View(Merits2016)
write.csv(x = Merits2016, file = "Merits2016S.csv", row.names = FALSE, quote = FALSE)