IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Test d'égalité de plusieurs colonnes all(x[-1] == x[1])


Sujet :

R

  1. #1
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut Test d'égalité de plusieurs colonnes all(x[-1] == x[1])
    Bonjour voici un code dont je n'arrive pas à comprendre totalement la syntaxe, je viens ici pour éclairer mes lumières

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    library(data.table)
     
    e <- structure(list(
      ID=c("A","B","C","D","a"),
      T1=c("1","2","3","4","a"),
      T2=c("a1","a2","a3","a4","a"),
      G1=c("T1","T2","T3","T4","b")), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame")
    )
     
     
    liste = which( sapply( names(e), function(x) grepl("^T.",x) ) )
    tous_egaux <- function(x) as.integer(all(x[1] == x[-1],na.rm=T)) 
    e <- as.data.table(e)
    e<- e[, TOUS_EGAUX := apply(.SD, 1, tous_egaux), .SDcols = liste]
    Il y a dans ce cas deux passages obscurs :

    Tout d'abord dans la fonction je ne comprends pas la syntaxe all(x[1] == x[-1],na.rm=T) (sauf le na.rm=Tque j'ai rajouté et que je comprends bien )
    Puis ensuite le apply(.SD,1,function) ( à quoi sert le 1 ? ) et le signe := qui semble être un signe d'affectation ?

    Merci de votre lecture, et peut-être de me donner quelques éléments d'explications.

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour Jérôme.
    x[1] == x[-1] indique que l'élément courant est égal au précédent. Le all n'est pas nécessaire à ton exemple précis, mais d'une manière générale il indique que toutes les comparaisons effectuées doivent renvoyer TRUE pour que le résultat soit TRUE.
    Ensuite dans les crochets du data.table, on applique cette fonction à toutes les colonnes indiquées dans .SDcols (c'est à dire la n°2 et la n°3 dans ton exemple, celles qui ont un nom commençant par T). S'il y avait plus de 2 colonnes comparées le all serait indispensable.
    Le 1 du apply indique que les comparaisons se font par ligne et pas par colonne (on ne veut pas comparer la valeur courante à la valeur précédente).
    J'espère que ça t'a aidé.
    Bon courage.
    Olivier

Discussions similaires

  1. Plusieurs colonnes
    Par mpat dans le forum ASP
    Réponses: 2
    Dernier message: 05/01/2005, 10h51
  2. Requête à plusieurs colonnes avec la fonction COUNT
    Par zigune dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2004, 10h43
  3. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22
  4. Remplacer plusieurs colonnes par un 'alias'
    Par zestrellita dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/04/2004, 16h51
  5. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo