【问题标题】:Single Allele to Biallelic Conditional on Major and Minor Allele Columns主要和次要等位基因列上的单等位基因到双等位基因条件
【发布时间】:2017-10-10 12:19:27
【问题描述】:

我有一个数据框,其中有几个人作为列,SNP 作为行。每列都有一个等位基因(例如 G 或 A 或 N(如果未调用)。还有每个 SNP 的主要和(单独的列)次要等位基因列。我正在尝试将单个等位基因值转换为双等位基因值对于基于主要和次要等位基因列的每个值(因此,如果个人的等位基因是主要等位基因,我想用空格分隔符粘贴次要等位基因,反之亦然)。如果缺少值(N)我想用 0 0 替换它。这里的想法是为 Plink 格式化这些数据。

到目前为止,我已经尝试使用 ifelse 函数,但没有成功。关于如何在这里获得双等位基因值的任何建议?非常感谢你!我已经以我所指的格式包含了一个组成的数据集。

我现在拥有的:

rs#       major minor   ind1    ind2    ind3    ind4
rs123456    A    G      A       A       A        G
rs123457    G    C      C       G       C        G
rs123458    C    G      C       C       G        C
rs123459    T    A      A       T       N        T

我想要什么

rs        major minor   ind1    ind2    ind3    ind4
rs123456    A    G      A G     A G     A G      G A
rs123457    G    C      C G     G C     C G      G C
rs123458    C    A      C A     C A     A C      C A
rs123459    T    A      A T     T A     0 0      T A

谢谢! 抢

【问题讨论】:

  • 为什么一定要依赖minor/major?核苷酸总是有其补体嘌呤/嘧啶(不包括 RNA)。生成它并将其粘贴到一个字符串中应该是一件轻而易举的事。
  • 谢谢!我的例子做得不好,但在这种情况下,由于这些是单核苷酸多态性,它们不一定遵循互补核苷酸规则,例如复制。我可以对其进行编辑以使其更清晰。
  • 请展示您期望的最复杂的示例。
  • 嗨 Roman,实际上,我想我可以像以前那样处理单个等位基因。很抱歉浪费您的时间!

标签: r


【解决方案1】:

这是一种做事方式。逐行浏览您的数据并从次要/主要查找补码。请注意,您的输入和预期输出不匹配。

xy <- read.table(text = "rs       major minor   ind1    ind2    ind3    ind4
rs123456    A    G      A       A       A        G
rs123457    G    C      C       G       C        G
rs123458    C    G      C       C       G        C
rs123459    T    A      A       T       N        T", header = TRUE)
xy

out <- apply(xy, MARGIN = 1, FUN = function(x) {
  findind <- grepl("^ind", names(x))
  x[x %in% x["major"] & findind] <- paste(x[x %in% x["major"] & findind], x["minor"])
  x[x %in% x["minor"] & findind] <- paste(x[x %in% x["minor"] & findind], x["major"])
  x[x %in% "N"] <- "0 0"
  list(x)
})
out <- sapply(out, "[", 1)
as.data.frame(do.call(rbind, out))

        rs major minor ind1 ind2 ind3 ind4
1 rs123456     A     G  A G  A G  A G  G A
2 rs123457     G     C  C G  G C  C G  G C
3 rs123458     C     G  C G  C G  G C  C G
4 rs123459     T     A  A T  T A  0 0  T A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2020-02-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多