I have a treatment that I already applied to a data frame, I wanted to put all this treatment in a function to facilitate its execution. The function takes in setting the table and its size, by executing the code here is the error that was displayed :

Error in dim(table_data) <- n : dims [product 39476] do not match the length of object [9]

explore_data=function(table=data.frame(a=factor(),b=factor(),c=factor(),d=factor(),e=factor(),f=factor()),n){
  dim(table_data)=n
  #mettre toutes les requetes en miniscule :
  table=table%>%mutate(a=str_to_lower(table$a))

  #extraire les metiers
  table_metier=table[,c('a','d','f')]

  #pour chaque id_requete on va garder que l'url avec la position url cliquee maximale:

  table=filter(table,c!='null')
  table=table%>%mutate(c=as.numeric(as.character(c)))
  table=group_by(table,b)%>%mutate(max_c=max(c))%>%filter(c==max_c)

  #le nombre d'utilisateur different qui ont fait le clic sur l'url
  tab_e=group_by(table,a,d,e)%>% summarise(nb_e=n())

  #regrouper les données 
  table=table[, c('a','d','b','e','f','max_c')]

  #But:calculer de la probabilité du clique sur une url pour une requete 

  #Pour chaque requete on calcule le nombdre de clique sur une réponse  : nb_req
  agreg1=table %>%group_by(a) %>%  summarize(nb_a=n())

  #on calcule pour chaque requete le nombre de fois ou une url est cliquée : nb_clic_url 
  agreg2 =table %>%group_by(a,d,max_c) %>%  summarize(nb_d=n())

  #on calcule la probabilté en divisant les deux: pr_clic = nb_clique_url/nb_requete 
  table_prob_clic_url=merge(agreg1,agreg2,by="a")%>%filter(nb_a!=0) %>% mutate(pr_clic=nb_d/nb_a )

  #but: on va calculer la probabilité qu'une reponse au rang n soit cliquée 

  #nombre de requete avec un clique au rang n:
  agreg4=group_by(table,max_c)%>%summarize(nb_c_n=n())

  #on supprime les id requtes identiques et on compte le nombre de requete 
  nb_req=nrow( distinct(table,b, .keep_all= FALSE))

  #on calcule la probabilité qu'une requete au rang n soit cliqué
  table_req_rang=agreg4%>%mutate(prob_req_clic=nb_c_n/nb_req)

  #calculer la différence des probablités
  table_final=merge(table_req_rang,table_prob_clic_url , by="max_c") %>% mutate(diff=abs(pr_clic - prob_req_clic))

  #on ajoute le nombre d'utilisateur
  table_data_final= merge(table_final,tab_e, by=c("a","d"))

  #on ajoute une colonne prop_clic_url = nombre de clique sur url/ nb_req
  table_data_final=mutate(table_data_final,prop_clic_url=nb_d/nb_a)

  #on ajoute les metiers : 
  table_data_final=merge(table_data_final,table_metier ,by=c("a","d"))

  #supprimer les doublons 
  table_data_final=group_by(table_data_final,a,d)%>% distinct(f, .keep_all= TRUE)

  #filtrere les prosition_url_cliqué>3 ,nombre d'utilisateur >3 et #ordonner du plus grand au plus petit
  table_data_final=filter(table_data_final,max_c>3,nb_e>3)
  table_data_final=table_data_final%>% arrange(desc(prop_clic_url,nb_req,max_c))
  table_data_final=table_data_final[, c('a','d','max_c','nb_c_n','nb_req','nb_d','prop_clic_url','nb_e','f','prob_req_clic','pr_clic','diff')]

  return(table_data_final)
}

I want to have at the end a treated table

0 Answers