如何使用数据框构建函数

时间:2019-05-13 09:58:18

标签: r function dataframe

我已经对数据框应用了一种处理方法,我想将所有这些处理方法放在一个函数中以方便其执行。该函数通过执行代码来设置表及其大小,这是显示的错误:

  

dim(table_data)中的错误<-n:     昏暗[产品39476]与对象[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)
}

我想最后得到一张经过处理的桌子

0 个答案:

没有答案