У меня есть такой кадр данных:
df <- data.frame(Patient.ID = rep(paste("Pat", seq(1:3), sep = ""), 2),
Gene = c(rep("Gene1", 3), rep("Gene2", 3)),
Ref = c("A", "C", "G", "T", "A", "T"),
Tum1 = c("A", "A", "T", "T", "A", "T"),
Tum2 = c("A", "C", "G", "G", "C", "C"))
Что я хотел бы сделать, это определить изменение, которое происходит между Ref или столбцом Tum.Другими словами, если Tum1 отличается от Tum2, возьмите строку символов, которая отличается от столбца Ref, и сохраните ее в отдельном столбце в качестве изменения, чтобы приведенный выше кадр данных стал:
df <- data.frame(Patient.ID = rep(paste("Pat", seq(1:3), sep = ""), 2),
Gene = c(rep("Gene1", 3), rep("Gene2", 3)),
Ref = c("A", "C", "G", "T", "A", "T"),
Tum1 = c("A", "A", "T", "T", "A", "T"),
Tum2 = c("A", "C", "G", "G", "C", "C"),
BaseChange = c("NoCh", "C.A", "G.T", "T.G", "A.C", "T.C"))
I'mЯ знаю, что я мог бы использовать вложенный оператор ifelse (), как показано ниже (но расширенный), чтобы решить эту проблему, но мой фактический фрейм данных имеет гораздо больше комбинаций, и я считаю, что для этого должен быть "более безопасный" метод.
df$BaseChange <- as.factor(ifelse(df$Ref == "C" & df$Tum1 == "A" | df$Ref== "C" & df$Tum2 == "A", "C.A",
ifelse((df$Ref == "G" & df$Tum1 == "T" | df$Ref == "G" & df$Tum2 == "T"), "G.T",...)))
Любая помощь будет принята с благодарностью.