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é!

Était-ce utile?

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) )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top