更新数据框中每行的变量

时间:2017-11-14 16:49:09

标签: r dataframe row bioconductor

我有一个如下所示的数据框:

chr    alleles    position
2      [A/T]      123456
3      [C/T]      5678910
8      [A/G]      8765435334

我想将每一行加载到变量中,例如:

library('BSgenome.Hsapiens.UCSC.hg19')
chr <- 'chr2'
alleles <- '[T/C]'
position <- 123456
offset <- 60

然后在迭代中使用它们:

seq <- paste(getSeq(Hsapiens,chr,position-offset,position-1),
+              alleles,
+              getSeq(Hsapiens,chr,position+1,position+offset),
+              sep='')

最后将输出作为另一个包含以下内容的数据帧:

chr    allele    position     seq
2      [A/T]      123456      "ACTTGGAGATTTGGAGGAAGCTCCAGAGAGAGAGAGGCTTCCCAGCGTGGACTTGAAAGA[A/T]GAAACCAGCATAGATAGCACCGTGAATGGTGAGTTGGAATTCCTGGTTTCACTTTTGTTA"

我已阅读this thread,但感谢不需要索引的解决方案!

1 个答案:

答案 0 :(得分:0)

我认为你应该使用purrr的map()-type function

我无法访问您的getSeq()函数或Hsapiens数据,但如果我能正确理解您的问题,这样的内容应该有效。

# define helper function to simply syntax and make code readable
seq_extractor <- function(data, chr, position, alleles, offset=60){
    pre_seq <- getSeq(data, chr, position-offset, position-1)
    post_seq <- getSeq(data, chr, position+1, position+offset)
    paste(pre_seq, alleles, post_seq, sep='')
}

# use pmap_chr() to map your function onto your existing data
df %>%
    mutate(seq = pmap_chr(list(chr, alleles, position), 
                          ~seq_extractor(Hsapiens, ..1, ..3, ..2))