У меня есть dataframe
(приблизительно dim 446664 X 234), который называется mydf
(dput
). Этот dataframe
имеет столбцы REF
и ALT
.Как преобразовать данные генотипирования
REF
имеет только одну букву в каждой строке, но ALT
может иметь одну, две или даже три буквы, разделенные запятой (","), остальные столбцы (столбцы с образцами) являются столбцами, в которых мне нужно делать всю работу.
Учитывая любую букву в REF
быть 0 и первая буква в ALT
как 1, вторая буква 2 и третья буква 3, соответственно, мне нужно сделать функцию так, чтобы:
можно заменить число во всех столбцах выборки (т. е. за исключением REF и ALT) с буквами, и если есть «./.»;
Заполните их NA/NA и сверните «/», чтобы получить парные буквы в каждой ячейке.
Наконец, мне нужно инвертировать все столбцы образцов по строкам (
transpose
), как показано на рисункеresult
. Спасибо!mydf<- structure(list(REF = structure(c(1L, 4L, 3L, 2L, 3L), .Label = c("A", "C", "G", "T"), class = "factor"), ALT = structure(c(6L, 6L, 1L, 9L, 1L), .Label = c("A", "A,C", "A,G", "A,T", "C", "C,G", "C,T", "G", "G,T", "T"), class = "factor"), X860 = structure(c(1L, 3L, 2L, 1L, 1L), .Label = c("./.", "0/0", "0/1", "0/2", "1/1" ), class = "factor"), X861 = structure(c(1L, 6L, 2L, 1L, 1L), .Label = c("./.", "0/0", "0/1", "0/2", "1/1", "1/2"), class = "factor"), X862 = structure(c(6L, 3L, 1L, 2L, 1L), .Label = c("./.", "0/0", "0/1", "0/2", "1/1", "2/2"), class = "factor")), .Names = c("REF", "ALT", "X860", "X861", "X862"), row.names = c(NA, -5L), class = "data.frame")
Ожидаемый результат:
X860 NANA TC GG NANA NANA
X861 NANA CG GG NANA NANA
X862 GG TC NANA CC NANA
В случае '1/2',' 1' означает 'REF', т.е. 'T' и' 2' для 'G' из 'C/G' в ALT? Или это просто 'CG'? Но, тогда меня путают с '0/1' как' TC'? – akrun
@akrun Если я правильно понял, это индекс, основанный на 0 букв в двух столбцах 'REF' и' ALT', как если бы они были объединены. Итак, для AC, G 0 = A, 1 = C, 2 = G – Tensibai
@ Tensibai Я думал, что если есть где-либо 0, это будет заменой буквы 'REF', а для других значений она основана на положение значений в «ALT», т.е. в случае 'C, G', это может быть' 1/2' или около того. Во всяком случае, сложно создать большой набор данных, чтобы попробовать с помощью 'apply' – akrun