2012-07-27 2 views
0

У меня есть файл данных длиной несколько миллионов строк и содержит информацию из многих групп. Ниже приводится сокращенный раздел:Если оператор взвешивания усреднен в R

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 

Я хотел бы создал взвешенное среднее значение (FREQ) переменной частоты (что само по себе является простым), однако в этом случае некоторые строки являются несогласованные (строки 3 & 4). Если буквы не выстраиваются в линию, тогда частота второй группы должна быть вычтена на 1 до того, как будет рассчитано взвешенное среднее этого маркера.

Я хотел бы настроить простой оператор IF, но я не уверен в синтаксисе такой задачи.

Любое понимание или направление оцениваются!

ответ

1

Скажите, что вы прочитали свои данные в кадре данных, называемом mydata. Затем выполните следующие действия:

mydata$GROUP2_FREQ <- mydata$GROUP2_FREQ - (mydata$GROUP1_A1 != mydata$GROUP2_A1) 

Это работает, потому что R обрабатывает Истинные значения как 1 и ложные значения 0.

EDIT: Попробуйте следующие вместо:

mydata$GROUP2_FREQ <- abs((as.character(mydata$GROUP1_A1) != 
          as.character(mydata$GROUP2_A1)) -     
          as.numeric(mydata$GROUP2_FREQ)) 
+0

Ответ отредактирован; Я не понял ваш вопрос в первый раз, когда я его прочитал. – Edward

+0

Привет, Эдвард, спасибо, я не уверен, что это совсем то, что я ищу. Это дало мне ошибку: «Ошибка в' $ <-. Data.frame' ('* tmp *', "GROUP2_FREQ", value = numeric (0)): Замена имеет 0 строк, данные имеют 5 ", поэтому Я не могу быть уверен, но частота должна быть вычтена из 1, ТОЛЬКО, если A1 и A2 между группами не совпадают. Имеет ли это смысл? – mfk534

+0

Он делает. Я вижу, вы хотите вычесть частоту от 1, а не наоборот (что я думал по вашему вопросу). Поэтому мой ответ должен быть изменен, чтобы отразить это ... что касается вашей ошибки, есть ли способ, которым вы можете дать небольшой воспроизводимый образец для проверки? – Edward