Si déclaration pour la moyenne pondérée dans R
-
12-12-2019 - |
Question
J'ai un fichier de données de plusieurs millions de lignes de long et contient des informations de nombreux groupes.Vous trouverez ci-dessous une section abrégée:
MARKER GROUP1_A1 GROUP1_A2 GROUP1_FREQ GROUP1_N GROUP2_A1 GROUP2_A2 GROUP2_FREQ GROUP2_N
rs10 A C 0.055 1232 A C 0.055 3221
rs1000 A G 0.208 1232 A G 0.208 3221
rs10000 G C 0.134 1232 C G 0.8624 3221
rs10001 C A 0.229 1232 A C 0.775 3221
Je voudrais créer une moyenne pondérée de la variable de fréquence (FREQ) (qui est simple), cependant, dans ce cas, certaines des lignes sont incompatibles (rangées 3 et 4).Si les lettres ne sont pas alignées, la fréquence du deuxième groupe doit être soustraite d'ici 1 avant que la moyenne pondérée de ce marqueur soit calculée.
Je voudrais configurer une déclaration simple si, mais je ne suis pas sûr de la syntaxe d'une telle tâche.
Tout aperçu ou une direction est apprécié!
La solution
Dites que vous avez lu vos données dans une trame de données appelée myData.Ensuite, procédez comme suit:
mydata$GROUP2_FREQ <- mydata$GROUP2_FREQ - (mydata$GROUP1_A1 != mydata$GROUP2_A1)
Cela fonctionne car r traite les vraies valeurs sous forme de 1 et de fausses valeurs que 0.
Edit: Essayez ce qui suit à la place:
mydata$GROUP2_FREQ <- abs( (as.character(mydata$GROUP1_A1) !=
as.character(mydata$GROUP2_A1)) -
as.numeric(mydata$GROUP2_FREQ) )