#r
#r
Вопрос:
У меня есть набор данных с именем proteome. В нем 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. Я думаю, что вы систематически путаете строки и столбцы в своем описании. В нынешнем виде текст не совсем понятен.
2. Из того, что я не понял, вы хотите, чтобы в столбце
Sequence
был набор строк, правильно?3. @FelipeAlvarenga да, извините, что я забыл упомянуть об этом в своем вопросе. Спасибо!
Ответ №1:
Если я правильно понял, вам просто нужно подмножество ваших данных в соответствии с наличием нужной строки. Используйте 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
Комментарии:
1. Привет, Фелипе, спасибо, что нашел время ответить на это. Поскольку в моем наборе данных тысячи строк и есть несколько случаев, когда я вижу перекрывающиеся последовательности, я не могу заранее объявить последовательность. В приведенном выше примере я показал только четыре такие строки. Вот почему я хочу придумать механизм, который позволяет мне сохранять только одну из перекрывающихся строк всякий раз, когда R встречает такие строки. Пожалуйста, дайте мне знать, если это непонятно. Спасибо!
2. Я отредактировал ответ, чтобы быть более точным. Если это не то, что вы ищете, отредактируйте свой вопрос с помощью более точной формулировки. Таким образом, мы сможем помочь вам лучше
3. Спасибо! Я отредактировал вопрос, чтобы еще больше прояснить его.