Я пытаюсь построить фрейм данных из следующего:
seq_name <- c('sequence1', 'sequence2')
seqs <- c('ATCGGA', 'TTGCGA')
seq_length <- 6
Здесь у нас есть две последовательности, называемые sequence1
и sequence2
, каждая из которых имеет длину 6 букв (например, ATCGGA
)
Я хочу создать фрейм данных с тремя столбцами:
- образец - содержащий имя последовательности - например:
sequence1
- seq - содержит последовательность - например:
ATCGGA
- pos - содержит индексную позицию для каждой позиции в
1:length(seq)
- например: 1
Я делаю это следующим образом:
df <- data.frame(rep(seq_name, seq_length) , rep(seqs, seq_length), pos=seq(1:seq_length))
colnames(df) <- c("sample", "seq", "pos")
str(df)
Однако, это не совсем правильный результат, так как у меня нет pos=2
для sequence1
:
df %>%
arrange(sample) %>%
head()
sample seq pos
1 sequence1 ATCGGA 1
2 sequence1 ATCGGA 3
3 sequence1 ATCGGA 5
4 sequence1 ATCGGA 1
5 sequence1 ATCGGA 3
6 sequence1 ATCGGA 5
В то время как я хочу:
sample seq pos
1 sequence1 ATCGGA 1
2 sequence1 ATCGGA 2
3 sequence1 ATCGGA 3
4 sequence1 ATCGGA 4
5 sequence1 ATCGGA 5
6 sequence1 ATCGGA 6
Затем я хочу перебрать каждую строку, и для каждой позиции в pos
взять букву из seq
, которая соответствует этой позиции.
Например:
Ожидаемые результаты должны быть:
sample seq pos nuc
<fctr> <fctr> <int> <chr>
1 sequence1 ATCGGA 1 A
2 sequence1 ATCGGA 2 T
3 sequence1 ATCGGA 3 C
4 sequence1 ATCGGA 4 G
5 sequence1 ATCGGA 5 G
...
Вот что я пытаюсь:
library(dplyr)
df <- df %>%
group_by(sample) %>%
arrange(sample, pos) %>%
mutate(nuc = substr(seq, 1:n(), pos) )
Однако это не дает мне ожидаемого результата. Вместо этого первые две строки:
sample seq pos nuc
<fctr> <fctr> <int> <chr>
1 sequence1 ATCGGA 1 A
2 sequence1 ATCGGA 1
3 sequence1 ATCGGA 3 C
4 sequence1 ATCGGA 3
5 sequence1 ATCGGA 5 G