Возврат максимальных значений из строки в определенном наборе столбцов в r - PullRequest
0 голосов
/ 03 октября 2019

У меня есть вывод из программы, аналогичной этому фрейму данных:

    df <- data.frame(Pos = c(1, 2, 3), Alel1 = c('A:1', 'T:0', 'C:0.5'),
                 Alel2 = c('T:0', 'C:1', 'A:0.3'), Alel3 = c(NA, NA, 'T:0.2'),
                 Alel4 = c('A:1', 'T:1', 'C:0.5'), Alel5 = c('T:0', 'C:0', 'A:0.5'),
                 Alel6 = c(NA, NA, NA))

Для каждой строки я хотел бы получить главный аллель Alel1, Alel 2 и Alel3 ( group1 ) и главный аллель Alel4, Alel 5 и Alel6 ( группа2 ). Плюс дополнительная информация о том, как отличаются основные аллели в группах 1 и 2 (, меняется ). Итак, я получаю новый столбец / фрейм данных, обобщающий информацию об аллелях, более менее похожий на этот:

 df1 <- data.frame(Group1 = c("A", "C", "C"), 
                  Group2 = c("A","T","0.5C 0.5A"), 
                  Changing = c(0,1,0.5))

Я пытаюсь отделить аллели от каждого столбца и добавить в новый столбец, используя этот

df$a <- substring(df$Alel1, 3)
df$b <- substring(df$Alel2, 3)
df$c <- substring(df$Alel3, 3)

затем найдите максимальное значение для каждой группы, используя этот

i <- as.character(c("a","b","c"))
j <- max.col(df[i],"first")

Но значения в j возвращаются с NA вместо имени столбца, и яне знаю, как вызвать соответствующий аллель из названия этого столбца. Любые более простые предложения, которые дают то, что я намеревался, очень ценятся!

1 Ответ

0 голосов
/ 03 октября 2019

Это то, что вы хотите?

i <- as.character(c("a","b","c"))

j <- i[max.col(replace(df[i], is.na(df[i]), -Inf), "first")]
#[1] "a" "b" "a
...