9
votes

Groupe par une colonne, sélectionnez la ligne avec minimum dans une colonne pour chaque paire de colonnes.

question difficile à la phrase. Voici un exemple de ce que j'aimerais faire. Un exemple de ce que je commence par: xxx pré>

pour toutes les paires de colonnes qui partagent un médicament (par exemple, «DR1»), je souhaite regrouper des lignes de «SYM», puis sélectionnez la ligne avec La plus petite valeur p (se termine par'P ') au sein de chaque groupe. Le résultat final de la carte ci-dessus. La carte serait la suivante: p>

       dr1.d        dr1.p      dr2.d      dr2.p       dr3.d       dr3.p      dr4.d      dr4.p   sym
1:  1.3297993 0.0235776357  -0.7990092 0.02017788 -0.22426789 0.040288638 -0.4333103 0.03436105 sym 1
2:  1.2724293 0.0004613738  -0.2894616 0.03485466 -0.05710677 0.003738094  0.7267507 0.02234770 sym 2


0 commentaires

3 Réponses :


2
votes

Avec de la fusion et de la coulée, c'est assez simple xxx


0 commentaires

3
votes

Voici une approche tout-en-une, bien que vous souhaitiez la diviser en étapes séparées pour la lisibilité:

dcast(melt(dt, measure = patterns("\\.p$", "\\.d$"), id.vars = "sym", 
  value.name = c("p", "d"))[, .SD[which.min(p)], by = list(sym, variable)], 
  sym ~ variable, value.var = c("p", "d"))
#     sym          p_1        p_2         p_3        p_4      d_1        d_2         d_3        d_4
#1: sym 1 0.0235776357 0.02017788 0.040288638 0.03436105 1.329799 -0.7990092 -0.22426789 -0.4333103
#2: sym 2 0.0004613738 0.03485466 0.003738094 0.02234770 1.272429 -0.2894616 -0.05710677  0.7267507


0 commentaires

13
votes

la chose la plus importante (et la plus puissante) à comprendre sur data.table est que, aussi longtemps que j renvoie une liste , chacun L'élément de la liste deviendra une colonne dans le résultat.

Avec cette connaissance et cette base R amusement, nous pouvons obtenir ce résultat directement en faisant: xxx

voir le pour plus.


0 commentaires