【问题标题】:Update variables for each row in a dataframe更新数据框中每一行的变量
【发布时间】:2017-11-14 16:49:08
【问题描述】:

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

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,但很欣赏不需要索引的解决方案!

【问题讨论】:

  • getSeq() 是来自加载的包(在这种情况下,是哪个?)还是您创建的函数(在这种情况下,您可以将该函数的源代码添加到您的问题中)?
  • 另外,Hsapiens 是您的数据框的名称吗?
  • @Phil 为混淆道歉,是的,getSeq 来自 BSgenome.Hsapiens.UCSC.hg19 库,Hsapiens 是加载包的属性。
  • 您能否更新您想要的输出以包含除列名之外的一些数据?
  • @seeellayewhy,感谢您的评论。我编辑了结果部分!

标签: r dataframe row bioconductor


【解决方案1】:

我认为您应该使用来自 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))

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多