Я пытаюсь выяснить, как найти неаннотированные области в белках.
У меня есть группируемая таблица, которая содержит одномерные координаты в белке, это означает, что много частей в одном сегментено почти между двумя сегментами есть пустое пространство (но не всегда).
Если бы мне дали это
structure(list(acc = c("AAF73695.1", "NP_224303.2", "WP_010882745.1",
"ABG85315.1", "ABG85315.1", "ABG85315.1"), domain = c("Pkinase",
"Pkinase", "Pkinase", "sCache_like", "HAMP", "PAS"), start = c(4,
4, 4, 30, 178, 242), end = c(287, 287, 287, 142, 231, 341), evalue = c(3.8e-41,
3.8e-41, 3.8e-41, 0.00064, 1.4e-09, 0.0038), len = c(800, 800,
800, 800, 800, 800)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L))
# A tibble: 6 x 6
acc domain start end evalue len
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 AAF73695.1 Pkinase 4 287 3.80e-41 800
2 NP_224303.2 Pkinase 4 287 3.80e-41 800
3 WP_010882745.1 Pkinase 4 287 3.80e-41 800
4 ABG85315.1 sCache_like 30 142 6.40e- 4 800
5 ABG85315.1 HAMP 178 231 1.40e- 9 800
6 ABG85315.1 PAS 242 341 3.80e- 3 800
, я бы хотел получить:
# A tibble: 12 x 6
acc domain start end evalue len
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 AAF73695.1 empty 1 3 0. 800
2 AAF73695.1 Pkinase 4 287 3.80e-41 800
3 AAF73695.1 empty 288 800 0. 800
4 ABG85315.1 empty 1 29 0. 1000
5 ABG85315.1 sCache_like 30 142 6.40e- 4 1000
6 ABG85315.1 empty 143 177 0. 1000
7 ABG85315.1 HAMP 178 231 1.40e- 9 1000
8 ABG85315.1 empty 232 241 0. 1000
9 ABG85315.1 PAS 242 341 3.80e- 3 1000
10 ABG85315.1 empty 342 1000 0. 1000
11 NP_224303.2 empty 1 3 0. 300
12 NP_224303.2 Pkinase 4 287 3.80e-41 300
13 NP_224303.2 empty 288 300 0. 300
14 WP_010882745.1 empty 1 3 3.80e-41 300
15 WP_010882745.1 Pkinase 4 287 3.80e-41 300
16 WP_010882745.1 empty 288 300 0. 300
с использованием тидиверов. Я пытаюсь что-то вроде этого
df %>%
group_by(acc) %>%
arrange(start, end) %>%
mutate(
domain = "empty",
start = end + 1,
end = lead(start - 1, default = len[1),
evalue = 0
) %>%
ungroup() %>%
distinct() %>%
bind_rows( df ) %>%
arrange(acc, start, end)
Но я получил неправильный результат:
structure(list(acc = c("AAF73695.1", "AAF73695.1", "ABG85315.1",
"ABG85315.1", "ABG85315.1", "ABG85315.1", "ABG85315.1", "ABG85315.1",
"NP_224303.2", "NP_224303.2", "WP_010882745.1", "WP_010882745.1"
), domain = c("Pkinase", "empty", "sCache_like", "empty", "HAMP",
"empty", "PAS", "empty", "Pkinase", "empty", "Pkinase", "empty"
), start = c(4, 288, 30, 143, 178, 232, 242, 342, 4, 288, 4,
288), end = c(287, 800, 142, 231, 231, 341, 341, 800, 287, 800,
287, 800), evalue = c(3.8e-41, 0, 0.00064, 0, 1.4e-09, 0, 0.0038,
0, 3.8e-41, 0, 3.8e-41, 0), len = c(800, 800, 800, 800, 800,
800, 800, 800, 800, 800, 800, 800)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -12L))
# A tibble: 12 x 6
acc domain start end evalue len
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 AAF73695.1 Pkinase 4 287 3.80e-41 800
2 AAF73695.1 empty 288 800 0. 800
3 ABG85315.1 sCache_like 30 142 6.40e- 4 800
4 ABG85315.1 empty 143 231 0. 800
5 ABG85315.1 HAMP 178 231 1.40e- 9 800
6 ABG85315.1 empty 232 341 0. 800
7 ABG85315.1 PAS 242 341 3.80e- 3 800
8 ABG85315.1 empty 342 800 0. 800
9 NP_224303.2 Pkinase 4 287 3.80e-41 800
10 NP_224303.2 empty 288 800 0. 800
11 WP_010882745.1 Pkinase 4 287 3.80e-41 800
12 WP_010882745.1 empty 288 800 0. 800
Любая помощь приветствуется.
Спасибозаранее.