Remplacement / fonction

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Remplacement / fonction

Messagepar Elsa Nario » 14 Sep 2021, 09:28

A

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Remplacement / fonction

Messagepar Eric Wajnberg » 15 Sep 2021, 06:03

Impossible de vous aider, votre code n'est pas reproductible.

Code : Tout sélectionner

> mutate
Erreur : objet 'mutate' introuvable
> across
Erreur : objet 'across' introuvable

Eric.

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Re: Remplacement / fonction

Messagepar Elsa Nario » 16 Sep 2021, 06:48

oui car justement c'est la dernière partie que je n'arrive pas à ajouter, si je l'enlève cela fonctionne.

Code : Tout sélectionner

result <- pop %>%
  mutate(across(starts_with("q"), ~ c("Oui" = 1, "Non" = 0)[.x])) %>%
  group_by(sexe) %>%
  select(client, poids, starts_with("q")) %>%
  nest() %>%
  rowwise() %>%
  transmute(
    turf_results = list(bind_rows(
      turf(
        data = data,
        n = sum(grepl("^q", names(data))),
        k = 2:3
      )[["turf"]],
      .id = "turf_id"
    ))
  ) %>%
  unnest(cols = "turf_results") %>%
  ungroup() %>%
  set_colnames(colnames(col)) %>%
  mutate(COMBINAISON = paste("Combinaison", COMBO, sep = " "), across((COMBINAISON_A), ~ c("1" = "2", "2" = "3")[.x])) %>%
  select(-COMBO)

#across(starts_with("q"), ~ c("1" = "X", "0" = " ")[.x])


Idem pour le 2ème point, je veux juste refaire la même chose mais sans le group_by

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Remplacement / fonction

Messagepar Eric Wajnberg » 16 Sep 2021, 08:34

Désolé, je ne comprends pas votre réponse. Que voulez-vous dire par "dernière partie".

Si je lance ce que je crois comprendre être la "première partie", je récupérer le message suivant :

Code : Tout sélectionner

Error in pop %>% mutate(MODALITE = "MODALITE", COMBINAISON_A = 1, COMBO = 1,  :
  impossible de trouver la fonction "%>%"

Personne ne pourra vous aider ici si vous ne donner pas un code reproductible, je le crains.

Eric.

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Re: Remplacement / fonction

Messagepar Elsa Nario » 16 Sep 2021, 10:05

Je ne comprends pas, si j'effectue ce programme chez moi, tout fonctionne

Code : Tout sélectionner

pop <- data.frame(
  client = 1:5,
  tranche_age = c("35-54 ans", "18-34 ans", "55 ans et +", "18-34 ans", "-18 ans"),
  sexe = c("Homme", "Femme", "Femme", "Homme", "Femme"),
  nb_pers_foyers = c(4, 2, 5, 3, 1),
  csp = c("Ouvrier", "Cadre", "Employé", "Ouvrier", "Retraité"),
  q_1 = c("Oui", "Non", "Non", "Oui", "Non"),
  q_2 = c("Non", "Oui", "Oui", "Oui", "Non"),
  q_3 = c("Oui", "Oui", "Non", "Non", "Oui"),
  q_4 = c("Non", "Oui", "Non", "Non", "Oui"),
  q_5 = c("Oui", "Oui", "Oui", "Non", "Oui"),
  poids = 1
)

col <- pop %>%
  mutate(MODALITE = "MODALITE", COMBINAISON_A = 1, COMBO = 1, RCHX = 1, FRQX = 1) %>%
  select(MODALITE, COMBINAISON_A, COMBO, RCHX, FRQX, starts_with("q"))

result <- pop %>%
  mutate(across(starts_with("q"), ~ c("Oui" = 1, "Non" = 0)[.x])) %>%
  group_by(sexe) %>%
  select(client, poids, starts_with("q")) %>%
  nest() %>%
  rowwise() %>%
  transmute(
    turf_results = list(bind_rows(
      turf(
        data = data,
        n = sum(grepl("^q", names(data))),
        k = 2:3
      )[["turf"]],
      .id = "turf_id"
    ))
  ) %>%
  unnest(cols = "turf_results") %>%
  ungroup() %>%
  set_colnames(colnames(col)) %>%
  mutate(COMBINAISON = paste("Combinaison", COMBO, sep = " "), across((COMBINAISON_A), ~ c("1" = "2", "2" = "3")[.x])) %>%
  select(-COMBO)

#across(starts_with("q"), ~ c("1" = "X", "0" = " ")[.x])


Et je souhaite ajouter la partie en commentaire dans ma dernière étape, comme ceci :

Code : Tout sélectionner

mutate(COMBINAISON = paste("Combinaison", COMBO, sep = " "), across(starts_with("q"), ~ c("1" = "X", "0" = " ")[.x])) %>%


Et je souhaite également refaire ce programme sur la totalité du data frame (sans group_by)

Merci

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Re: Remplacement / fonction

Messagepar Elsa Nario » 17 Sep 2021, 09:48

Est-ce que ma demande est clair ? ou il faut plus de précision ? Merci

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Remplacement / fonction

Messagepar Eric Wajnberg » 17 Sep 2021, 10:02

De toute évidemence, vous utilisez - apparemment sans le savoir (?) - un package, une library, qui n'est pas en standard sous R. Je n'ai par exemple, comme je l'ai dit, pas de fonction mutate() ou across() de mon côté.

Peut-être d'autres que moi connaissent ici la library en question et pourront vous aider.

Cordialement, Eric.

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Remplacement / fonction

Messagepar Eric Casellas » 17 Sep 2021, 10:18

Bonjour,

Eric Wajnberg a écrit :Peut-être d'autres que moi connaissent ici la library en question et pourront vous aider.


Je pratique pas trop ce paquet mais j'ai l'impression que c'est dplyr du tidyverse

Eric
Eric

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

Re: Remplacement / fonction

Messagepar Elsa Nario » 20 Sep 2021, 13:06

Savez-vous juste ce qui ne va pas quand j'essaie de le reproduire sans le group_by ? alors qu'avec le group_by cela fonctionne bien

Code : Tout sélectionner

pop <- data.frame(
  client = 1:5,
  tranche_age = c("35-54 ans", "18-34 ans", "55 ans et +", "18-34 ans", "-18 ans"),
  sexe = c("Homme", "Femme", "Femme", "Homme", "Femme"),
  nb_pers_foyers = c(4, 2, 5, 3, 1),
  csp = c("Ouvrier", "Cadre", "Employé", "Ouvrier", "Retraité"),
  q_1 = c("Oui", "Non", "Non", "Oui", "Non"),
  q_2 = c("Non", "Oui", "Oui", "Oui", "Non"),
  q_3 = c("Oui", "Oui", "Non", "Non", "Oui"),
  q_4 = c("Non", "Oui", "Non", "Non", "Oui"),
  q_5 = c("Oui", "Oui", "Oui", "Non", "Oui"),
  poids = 1
)
col <- pop %>%
  mutate(MODALITE = "MODALITE", COMBINAISON_A = 1, COMBO = 1, RCHX = 1, FRQX = 1) %>%
  select(MODALITE, COMBINAISON_A, COMBO, RCHX, FRQX, starts_with("q"))
 
  esult_all <- pop %>%
  mutate(across(starts_with("q"), ~ c("Oui" = 1, "Non" = 0)[.x])) %>%
  select(client, poids, starts_with("q")) %>%
  transmute(
    turf_results = list(bind_rows(
        data = data,
        n = sum(grepl("^q", names(data))),
        k = 2:3
      )[["turf"]]
    )) %>%
  set_colnames(colnames(col)) %>%
  mutate(COMBINAISON = paste("Combinaison", COMBO, sep = " "), across(starts_with("q"), ~ c("1" = "X", "0" = " ")[.x])) %>%
  select(-COMBO)

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Remplacement / fonction

Messagepar Mickael Canouil » 20 Sep 2021, 14:45

Pour faire simple "non".

Même si pour ma part je connais les fonctions (sauf set_colnames par exemple, dois-je deviner lesquelles des 15 000 extensions R contiennent cette fonction et les essayer ?), si vous ne les donnez pas avec votre code, votre code est inexploitable.
Vous ne permettez à personne de vous aider, d'où les réponses des Eric.

De plus, vos dernières demandes relèvent toutes fondamentalement du même problème, vous appliquez des fonctions sans savoir ce qu'elles font et comment.

Parce-que, j'ai quand même un travail, voici par exemple ce que "reprex" me dit avec votre code :
  • Le code pour générer le reprex :

    Code : Tout sélectionner

    reprex::reprex({
    pop <- data.frame(
      client = 1:5,
      tranche_age = c("35-54 ans", "18-34 ans", "55 ans et +", "18-34 ans", "-18 ans"),
      sexe = c("Homme", "Femme", "Femme", "Homme", "Femme"),
      nb_pers_foyers = c(4, 2, 5, 3, 1),
      csp = c("Ouvrier", "Cadre", "Employé", "Ouvrier", "Retraité"),
      q_1 = c("Oui", "Non", "Non", "Oui", "Non"),
      q_2 = c("Non", "Oui", "Oui", "Oui", "Non"),
      q_3 = c("Oui", "Oui", "Non", "Non", "Oui"),
      q_4 = c("Non", "Oui", "Non", "Non", "Oui"),
      q_5 = c("Oui", "Oui", "Oui", "Non", "Oui"),
      poids = 1
    )

    col <- pop %>%
      mutate(MODALITE = "MODALITE", COMBINAISON_A = 1, COMBO = 1, RCHX = 1, FRQX = 1) %>%
      select(MODALITE, COMBINAISON_A, COMBO, RCHX, FRQX, starts_with("q"))

    result <- pop %>%
      mutate(across(starts_with("q"), ~ c("Oui" = 1, "Non" = 0)[.x])) %>%
      group_by(sexe) %>%
      select(client, poids, starts_with("q")) %>%
      nest() %>%
      rowwise() %>%
      transmute(
        turf_results = list(bind_rows(
          turf(
            data = data,
            n = sum(grepl("^q", names(data))),
            k = 2:3
          
    )[["turf"]],
          .id = "turf_id"
        ))
      ) %>%
      unnest(cols = "turf_results") %>%
      ungroup() %>%
      set_colnames(colnames(col)) %>%
      mutate(COMBINAISON = paste("Combinaison", COMBO, sep = " "), across((COMBINAISON_A), ~ c("1" = "2", "2" = "3")[.x])) %>%
      select(-COMBO)

    #across(starts_with("q"), ~ c("1" = "X", "0" = " ")[.x])
    }) 
  • La sortie de reprex :

    Code : Tout sélectionner

    pop <- data.frame(
      client = 1:5,
      tranche_age = c("35-54 ans", "18-34 ans", "55 ans et +", "18-34 ans", "-18 ans"),
      sexe = c("Homme", "Femme", "Femme", "Homme", "Femme"),
      nb_pers_foyers = c(4, 2, 5, 3, 1),
      csp = c("Ouvrier", "Cadre", "Employé", "Ouvrier", "Retraité"),
      q_1 = c("Oui", "Non", "Non", "Oui", "Non"),
      q_2 = c("Non", "Oui", "Oui", "Oui", "Non"),
      q_3 = c("Oui", "Oui", "Non", "Non", "Oui"),
      q_4 = c("Non", "Oui", "Non", "Non", "Oui"),
      q_5 = c("Oui", "Oui", "Oui", "Non", "Oui"),
      poids = 1
    )

    col <- pop %>%
      mutate(MODALITE = "MODALITE", COMBINAISON_A = 1, COMBO = 1, RCHX = 1, FRQX = 1) %>%
      select(MODALITE, COMBINAISON_A, COMBO, RCHX, FRQX, starts_with("q"))
    #> Error in pop %>% mutate(MODALITE = "MODALITE", COMBINAISON_A = 1, COMBO = 1, : could not find function "%>%"
    result <- pop %>%
      mutate(across(starts_with("q"), ~ c("Oui" = 1, "Non" = 0)[.x])) %>%
      group_by(sexe) %>%
      select(client, poids, starts_with("q")) %>%
      nest() %>%
      rowwise() %>%
      transmute(
        turf_results = list(bind_rows(
          turf(
            data = data,
            n = sum(grepl("^q", names(data))),
            k = 2:3
          
    )[["turf"]],
          .id = "turf_id"
        ))
      ) %>%
      unnest(cols = "turf_results") %>%
      ungroup() %>%
      set_colnames(colnames(col)) %>%
      mutate(COMBINAISON = paste("Combinaison", COMBO, sep = " "), across((COMBINAISON_A), ~ c("1" = "2", "2" = "3")[.x])) %>%
      select(-COMBO)
    #> Error in pop %>% mutate(across(starts_with("q"), ~c(Oui = 1, Non = 0)[.x])) %>% : could not find function "%>%"
    #across(starts_with("q"), ~ c("1" = "X", "0" = " ")[.x])     

Fournissez un exemple reproductible, lisez la documentation des fonctions, exécutez le code ligne par ligne pour identifier à quelle moment il y a un problème selon vous.

Et au vu de votre code, vous n'avez pas lu ou compris une de mes réponses sur votre précédent billet ...
viewtopic.php?f=3&t=10456#p48549

EDIT :

Code : Tout sélectionner

pop <- data.frame(
  
client 1:5,
  
tranche_age c("35-54 ans""18-34 ans""55 ans et +""18-34 ans""-18 ans"),
  
sexe c("Homme""Femme""Femme""Homme""Femme"),
  
nb_pers_foyers c(42531),
  
csp c("Ouvrier""Cadre""Employé""Ouvrier""Retraité"),
  
q_1 c("Oui""Non""Non""Oui""Non"),
  
q_2 c("Non""Oui""Oui""Oui""Non"),
  
q_3 c("Oui""Oui""Non""Non""Oui"),
  
q_4 c("Non""Oui""Non""Non""Oui"),
  
q_5 c("Oui""Oui""Oui""Non""Oui"),
  
poids 1
)

library("dplyr")
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library("tidyr")
library("turfR")
#> Warning: package 'turfR' was built under R version 4.1.1
res_by_sexe <- pop %>%
  
mutate(across(starts_with("q"), ~ c("Oui" 1"Non" 0)[.x])) %>%
  
group_by(MODALITE sexe) %>%
  
select(clientpoidsstarts_with("q")) %>%
  
nest() %>%
  
rowwise() %>%
  
transmute(
    
turf_results = list(bind_rows(
      
turf(
        
data data,
        
sum(grepl("^q"names(data))),
        
2:3
      
)[["turf"]],
      .
id "COMBINAISON_A"
    
))
  ) %>%
  
unnest(cols "turf_results") %>%
  
ungroup() %>%
  
rename_all(function(xifelse(grepl("^[0-9]"x), sprintf("q_%s"x), toupper(x))) %>%
  
mutate(
    
COMBINAISON paste("Combinaison"COMBOsep " "),
    
# COMBINAISON_A = c("1" = "2", "2" = "3")[as.character(COMBINAISON_A)], # Seems weird and likely to cause NAs
    
across(starts_with("q_"), ~ c("1" "X""0" " ")[as.character(.x)])
  ) %>%
  
select(-COMBO)
#> Adding missing grouping variables: `MODALITE`
#> 2 of 5: 0.01400113 sec
#> 3 of 5: 0.007996798 sec
#> total time elapsed: 0.02398086 sec 
#> 2 of 5: 0.008999109 sec
#> 3 of 5: 0.02200699 sec
#> total time elapsed: 0.03199005 sec
res_by_sexe
#> # A tibble: 40 x 10
#>    MODALITE COMBINAISON_A  RCHX  FRQX q_1   q_2   q_3   q_4   q_5   COMBINAISON 
#>    <chr>    <chr>         <dbl> <dbl> <chr> <chr> <chr> <chr> <chr> <chr>       
#>  1 Homme    1               1     1.5 "X"   "X"   " "   " "   " "   Combinaison~
#>  2 Homme    1               1     1.5 "X"   " "   "X"   " "   " "   Combinaison~
#>  3 Homme    1               1     1.5 "X"   " "   " "   " "   "X"   Combinaison~
#>  4 Homme    1               1     1   "X"   " "   " "   "X"   " "   Combinaison~
#>  5 Homme    1               1     1   " "   "X"   "X"   " "   " "   Combinaison~
#>  6 Homme    1               1     1   " "   "X"   " "   " "   "X"   Combinaison~
#>  7 Homme    1               0.5   1   " "   " "   "X"   " "   "X"   Combinaison~
#>  8 Homme    1               0.5   0.5 " "   "X"   " "   "X"   " "   Combinaison~
#>  9 Homme    1               0.5   0.5 " "   " "   "X"   "X"   " "   Combinaison~
#> 10 Homme    1               0.5   0.5 " "   " "   " "   "X"   "X"   Combinaison~
#> # ... with 30 more rows
res_homme <- filter(popsexe == "Homme") %>%
  
mutate(across(starts_with("q"), ~ c("Oui" 1"Non" 0)[.x])) %>%
  
select(clientpoidsstarts_with("q")) %>%
  
transmute(
    
turf_results = list(bind_rows(
      
turf(
        
data = .,
        
sum(grepl("^q"names(.))),
        
2:3
      
)[["turf"]],
      .
id "turf_id"
    
))
  ) %>%
  
unnest(cols "turf_results") %>%
  
rename_all(function(xifelse(grepl("^[0-9]"x), sprintf("q_%s"x), toupper(x))) %>%
  
mutate(
    
COMBINAISON paste("Combinaison"COMBOsep " "),
    
# COMBINAISON_A = c("1" = "2", "2" = "3")[as.character(COMBINAISON_A)], # Seems weird and likely to cause NAs
    
across(starts_with("q_"), ~ c("1" "X""0" " ")[as.character(.x)])
  ) %>%
  
select(-COMBO)
#> 2 of 5: 0.01299787 sec
#> 3 of 5: 0.0170002 sec
#> total time elapsed: 0.03200316 sec
res_homme
#> # A tibble: 40 x 9
#>    TURF_ID  RCHX  FRQX q_1   q_2   q_3   q_4   q_5   COMBINAISON   
#>    <chr>   <dbl> <dbl> <chr> <chr> <chr> <chr> <chr> <chr>         
#>  1 1         1     1.5 "X"   "X"   " "   " "   " "   Combinaison 1 
#>  2 1         1     1.5 "X"   " "   "X"   " "   " "   Combinaison 2 
#>  3 1         1     1.5 "X"   " "   " "   " "   "X"   Combinaison 4 
#>  4 1         1     1   "X"   " "   " "   "X"   " "   Combinaison 3 
#>  5 1         1     1   " "   "X"   "X"   " "   " "   Combinaison 5 
#>  6 1         1     1   " "   "X"   " "   " "   "X"   Combinaison 7 
#>  7 1         0.5   1   " "   " "   "X"   " "   "X"   Combinaison 9 
#>  8 1         0.5   0.5 " "   "X"   " "   "X"   " "   Combinaison 6 
#>  9 1         0.5   0.5 " "   " "   "X"   "X"   " "   Combinaison 8 
#> 10 1         0.5   0.5 " "   " "   " "   "X"   "X"   Combinaison 10
#> # ... with 30 more rows 


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité

cron