У меня есть кадр bp_example
данных, который выглядит следующим образом:Получить символы из одного столбца на основе входных данных из столбца в стороне
structure(list(Sequence = c("Sequence", "Sequence", "Sequence",
"Sequence", "Sequence", "Sequence", "Sequence", "Sequence", "Sequence",
"Sequence", "Sequence", "Sequence", "Sequence", "Sequence", "Sequence",
"Sequence", "Sequence", "Sequence", "Sequence", "Sequence", "Sequence",
"Sequence", "Sequence", "Sequence", "Sequence"), start = c(1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25), end = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25),
score = c(-0.205, -0.229, -0.115, -0.427, -0.327, -0.543,
-0.717, -0.923, -1.241, -1.471, -1.737, -1.717, -1.247, -1.137,
-0.689, -0.731, -0.337, 0.091, 0.579, 0.93, 0.575, 0.128,
-0.036, -0.186, -0.259), residue = c("M", "D", "A", "R",
"M", "R", "E", "L", "S", "F", "K", "V", "V", "L", "L", "G",
"E", "G", "R", "V", "G", "K", "T", "S", "L"), epitope = c(".",
".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".",
".", ".", ".", ".", ".", "E", "E", "E", ".", ".", ".", "."
)), .Names = c("Sequence", "start", "end", "score", "residue",
"epitope"), class = c("data.table", "data.frame"), row.names = c(NA,
-25L))
Я не совсем уверен, что это можно делать то, что я хочу, но в любом случае , вот. Я хочу выполнить итерацию по столбцу bp_example$epitope
, и в случае, если в колонке больше, скажем, 14 «Es», т.е. 15 или более последовательных строк, где в столбце появляется «E», я хотел бы иметь соответствующий символы в предыдущем столбце (bp_example$residue
), напечатанные как одна строка (множитель).
Учитывая пример, который я дал, хотел бы, чтобы строка MDARMRELSFKVVLLG
напечатана (лучше всего хранится как элемент list
или data.frame
).
У меня был ход с while
петлями, но никакого успеха на всех.
Или что вы хотите? – akrun
Возможно, это помогает библиотеке (data.table); setDT (df1) [, grp: = rleid (epitope == "E")] [epitope == "E", list (остатокConcat = if (.N> 14) list (остаток)), (последовательность, grp) ] ' – akrun
Знаете ли вы способ получить результат как один вектор символа? Я хочу сказать, что я хотел бы получить 'MDARMRELSFKVVLLG' вместо' [1] "M" "D" "A" "R" "M" "R" "E" "L" "S" "F" "K" «V» «V» «L» «L» «G» (я не сформулировал вопрос точно так, как я считаю) – BCArg