Вернуть одну из нескольких строк с частично совпадающими записями - PullRequest
1 голос
/ 29 марта 2019

У меня есть набор данных с названием протеома.В нем 14 столбцов и тысячи строк.

dput(Proteome)
    structure(list(Protein.name = structure(c(1L, 1L, 1L, 1L, 2L, 
    3L), .Label = c("HCTF", "IFT", "ROSF"), class = "factor"), X..Proteins = c(5L, 
    5L, 5L, 5L, 3L, 7L), X..PSMs = c(3L, 1L, 6L, 2L, 2L, 4L), Previous.5.amino.acids =   structure(c(4L, 
5L, 4L, 2L, 3L, 1L), .Label = c("CWYAT", "FCLKP", "MGCPT", "NCTMY", 
"TMYFC"), class = "factor"), Sequence = structure(c(5L, 1L, 4L, 
2L, 3L, 6L), .Label = c("FCLKPGCNFHAESTRGYR", "GCNFHAESTR", "GFGFNWPHAVR", 
"GHFCLKPGCNFHAESTR", "GHFCLKPGCNFHAESTRGYR", "GNFSVKLMNR"), class = "factor")), .Names = c("Protein.name", 
"X..Proteins", "X..PSMs", "Previous.5.amino.acids", "Sequence"
), class = "data.frame", row.names = c(NA, -6L))

Интересующий столбец в этом наборе данных - «Последовательность».В строке 2 этого столбца отсутствуют первые две буквы строки 1;в строке 3 последние три буквы строки 1 отсутствуют;в строке 4 отсутствуют первые семь и последние три буквы строки 1.

Строки 2, 3 и 4 отражают артефакты научного метода, который я использовал для генерации данных, и поэтому я хочуудалите эти записи.

Я хочу, чтобы R возвратил только одну из четырех строк, в идеале строку 1, и удалил остальные.R может сделать это, сначала найдя все строки с совпадающей строкой букв, а затем удалив такие строки, сохранив только одну.Например, в приведенном выше наборе данных GCNFHAESTR совпадает во всех четырех строках, поэтому я хочу, чтобы R возвращал мне только одну строку, в идеале - верхнюю.Но я не знаю, как это сделать.

Для дальнейшего уточнения, «Последовательность» имеет сотни строк с частично совпадающими записями, но совпадающие записи в этих строках отличаются от показанных в примере выше.Например, возможно, что строки нет.35 и 39 имеют следующие записи (строка 35: GNYTCAGCWPFK и строка 36: YTCAGCWPFK).Поскольку совпадающие записи в этих строках полностью отличаются от приведенных в примере выше, я не могу объявить строку заранее.Итак, я хочу придумать механизм, который позволяет мне обнаруживать все те строки, которые имеют частично совпадающие записи, а затем сохранять только одну из них, при этом удаляя другие.

Жду ответа от экспертов.

Спасибо!

1 Ответ

1 голос
/ 29 марта 2019

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

aa <- structure(list(Protein.name = structure(c(1L, 1L, 1L, 1L, 2L, 3L),
                                              .Label = c("HCTF", "IFT", "ROSF"),
                                              class = "factor"),
                     X..Proteins = c(5L, 5L, 5L, 5L, 3L, 7L),
                     X..PSMs = c(3L, 1L, 6L, 2L, 2L, 4L), 
                     Previous.5.amino.acids =   structure(c(4L, 5L, 4L, 2L, 3L, 1L),
                                                          .Label = c("CWYAT", "FCLKP", "MGCPT", "NCTMY", "TMYFC"),
                                                          class = "factor"),
                     Sequence = structure(c(5L, 1L, 4L, 2L, 3L, 6L),
                                          .Label = c("FCLKPGCNFHAESTRGYR", "GCNFHAESTR", "GFGFNWPHAVR",
                                                     "GHFCLKPGCNFHAESTR", "GHFCLKPGCNFHAESTRGYR", "GNFSVKLMNR"), 
                                          class = "factor")), 
                .Names = c("Protein.name", "X..Proteins", "X..PSMs", "Previous.5.amino.acids", "Sequence"),
                class = "data.frame", row.names = c(NA, -6L))

Хорошо бы заранее объявить строку

myStrToDetect <-'GCNFHAESTR'

#the following line filters the data set into those where "Sequence" has the pattern you provided (4 rows)
matching_df <- aa[grepl(myStrToDetect , aa$Sequence),]

Protein.name X..Proteins X..PSMs Previous.5.amino.acids             Sequence
1         HCTF           5       3                  NCTMY GHFCLKPGCNFHAESTRGYR
2         HCTF           5       1                  TMYFC   FCLKPGCNFHAESTRGYR
3         HCTF           5       6                  NCTMY    GHFCLKPGCNFHAESTR
4         HCTF           5       2                  FCLKP           GCNFHAESTR

# This next command chooses only the first line, if there are multiple occurrences
head(matching_df, 1)

  Protein.name X..Proteins X..PSMs Previous.5.amino.acids             Sequence
1         HCTF           5       3                  NCTMY GHFCLKPGCNFHAESTRGYR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...