R обратные строки в кадре данных
У меня большой фрейм данных, и я хотел бы обратить строки, если они не такие же, как в столбце, например, я бы изменил GA на AG и оставил все остальное.
structure(list(number = c("rs1", "rs2", "rs3", "rs4", "rs5",
"rs6"), ref = c("AG", "AG", "AG", "AG", "AC", "AC"), s1 = c("GA",
"AG", "GA", "AG", "CA", "AA"), s2 = c("AA", "GG", "GA", "AA",
"AA", "AC"), s3 = c("GG", "AG", "GG", "AA", "CC", "AC"), s4 = c("GA",
"GG", "GA", "AA", "AA", "CC"), s5 = c("AA", "GG", "GA", "GG",
"AA", "CC"), s6 = c("AA", "AG", "GG", "AG", "AA", "CC")), .Names =
c("number",
"ref", "s1", "s2", "s3", "s4", "s5", "s6"), class = "data.frame",
row.names = c(NA,
-6L))
Input:
number ref s1 s2 s3 s4 s5 s6 ...
rs1 AG GA AA GG GA AA AA ...
rs2 AG AG GG AG GG GG AG ...
rs3 AG GA GA GG GA GA GG ...
rs4 AG AG AA AA AA GG AG ...
rs5 AC CA AA CC AA AA AA ...
rs6 AC AA AC AC CC CC CC ...
Desired output:
number ref s1 s2 s3 s4 s5 s6 ...
rs1 AG AG AA GG AG AA AA ...
rs2 AG AG GG AG GG GG AG ...
rs3 AG AG AG GG AG AG GG ...
rs4 AG AG AA AA AA GG AG ...
rs5 AC AC AA CC AA AA AA ...
rs6 AC AA AC AC CC CC CC ...
Я попытался использовать библиотеку (stingi) функцию stri_reverse
df.1 <- c(df[1:2],sapply(df[3:length(df)], function(x) stri_reverse[[x]]))
Ошибка в stri_reverse[[x]]: объект типа "замыкание" не может быть подмножеством
1 ответ
Решение
Ошибка возникает из-за того, что вы пытаетесь поднастроить функцию stri_reverse
с помощью [[
(возможно опечатка?); Кроме того, вам также нужно немного изменить свою логику, чтобы получить то, что вам нужно:
library(stringi)
df[-c(1,2)] <- lapply(df[-c(1,2)], function(col) {
rev_col = stri_reverse(col)
ifelse(rev_col == df$ref, rev_col, col)
})
df
# number ref s1 s2 s3 s4 s5 s6
#1 rs1 AG AG AA GG AG AA AA
#2 rs2 AG AG GG AG GG GG AG
#3 rs3 AG AG AG GG AG AG GG
#4 rs4 AG AG AA AA AA GG AG
#5 rs5 AC AC AA CC AA AA AA
#6 rs6 AC AA AC AC CC CC CC