У меня есть огромный фрейм данных, подобный этому:
CHR SNP POS REC MAP
1 NA 739010 2.6776 1.9791
1 rs12082473 740857 2.6843 1.9840
1 NA 754745 0.3996 2.0147
1 rs11240776 765269 NA NA
1 NA 765948 0.4943 2.0192
1 NA 767038 0.49313 2.0197
Все строки в POS имеют значение, но в MAP есть много NA. Используя R, я хочу заполнить эти NA в новом столбце INT, используя линейную интерполяцию (ось x = POS, ось y = MAP). Например, для строки 5 (1 rs11240776 765269 NA NA) я должен получить значение от 2.0147 до 2.0192 в новом поле INT (например, 2.0164; просто игрушечный пример). Столбцы CHR представляют собой хромосомы, которые go между 1 и 22. MAP линейно возрастает от первой до конечной позиции CHR 1, но CHR2 снова начинается с 0, и то же самое для всех хромосом. Таким образом, необходимо выполнить интерполяцию, сгруппировав данные по CHR.
Мой ожидаемый результат:
CHR SNP POS REC MAP INT
1 NA 739010 2.6776 1.9791 1.9791
1 rs12082473 740857 2.6843 1.9840 1.9840
1 NA 754745 0.3996 2.0147 2.0147
1 rs11240776 765269 NA NA 2.0164
1 NA 765948 0.4943 2.0192 2.0192
1 NA 767038 0.49313 2.0197 2.0197
Я пробовал разные способы, как показано в:
Интерполяция значений NA
линейная интерполяция пропущенных значений во временных рядах
, но ни одно из этих решений не работает для моих данных. Любое предложение приветствуется!