gpt4 book ai didi

r - 如何在另一列中创建数据标记信息列

转载 作者:行者123 更新时间:2023-12-04 09:34:07 25 4
gpt4 key购买 nike

我有一个基因组位置 ID 的遗传数据集,其中 2 个 ID 可以在一列中具有共享值。我希望创建另一个列来标识那些具有共享信息的人。
例如我的数据看起来像:

CP     Shared_CP
1:10 1:10, 1:11, 1:12
1:20 1:56
1:11 1:11, 1:10, 1:12
1:22 1:21, 1:30
1:30 1:30, 1:21
我希望用匹配的 Shared_CP 标记行信息并唯一标识每个分组,输出:
CP     Shared_CP          matches
1:10 1:10, 1:11, 1:12 1
1:20 1:56 NA
1:11 1:11, 1:10, 1:12 1
1:22 1:21, 1:30 2
1:30 1:30, 1:21 2
我看到根据其他列的信息创建新列也有类似的问题,但我还没有找到一种方法来使它们解决我的问题,目前我一直在尝试使用基于共享信息的行标记如果他们在 Shared_CP 中有逗号列,但我不知道如何为单个匹配项提供一个唯一标识符来存储 - 任何帮助将不胜感激。
示例输入数据:
structure(list(CP = c("1:10", "1:20", "1:11", "1:22", "1:30"
), Shared_CP = c("1:10, 1:11, 1:12", "1:56", "1:11, 1:10, 1:12", "1:21, 1:30",
"1:30, 1:21")), row.names = c(NA, -5L), class = c("data.table",
"data.frame"))
编辑:对于额外的细节,我的实际数据集可以有多个 Shared_CP ID,而不仅仅是 2。在一行中也可以有多个 Shared_CP 输入,其中 CP 不相同/包含在 Shared_CPs 列中,我已将示例更改为反射(reflect)这一点。

最佳答案

如果我理解正确,OP想要

  • Shared_CP 创建唯一的组号无论基因组位置在 Shared_CP 中出现的顺序如何.所以,1:10, 1:11, 1:12 , 1:11, 1:10, 1:12 , 和 1:12, 1:11, 1:10都是等价的。
  • 此外,如果 Shared_CP 中只包含一个元素它应该被分配组号 NA .
  • 列的值 CP无关紧要。

  • 使用 data.table 的一种可能答案是
    library(data.table)
    library(magrittr)
    DT[, tmp := strsplit(Shared_CP, ", ") %>% unlist() %>% sort() %>% toString(),
    by = seq(nrow(DT))][
    order(tmp) & tmp %like% ", ", matches := rleid(tmp)][
    , tmp := NULL][]
         CP        Shared_CP matches
    1: 1:10 1:10, 1:11, 1:12 1
    2: 1:20 1:56 NA
    3: 1:11 1:11, 1:10, 1:12 1
    4: 1:22 1:21, 1:30 2
    5: 1:30 1:30, 1:21 2

    这符合 OP 的预期结果。特别是,OP 已将第 4 行分配给 matches第 2 组。
    对于每一行, Shared_CP被分成几部分,被强制转换为字符基因组位置向量,这些位置被排序并再次组合为字符键。此键存储在临时列 tmp 中. Shared_CP ID 号 matches是通过应用 rleid() 创建的 tmp 的订购版本上的功能,从而跳过 tmp 的行不包括 ", " ,即,其中 Shared_CP仅由一个元素组成。最后, tmp已移除。
    管道(来自包 magrittr)和链接(来自 data.table)用于提高可读性。

    关于r - 如何在另一列中创建数据标记信息列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62677507/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com