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
Другие вопросы по тегам