当前位置: 首页 > 知识库问答 >
问题:

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

孙明德
2023-03-14

我有一个基因组位置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个。在一行中,也可能有多个共享_CP输入,其中的CPs不相同/包含在Shared _CPs列中,我修改了示例以反映这一点。

共有1个答案

仲孙超
2023-03-14

如果我理解正确的话,行动组想要

    < li >为< code>Shared_CP创建唯一的组号,而不考虑基因组位置在< code>Shared_CP中出现的顺序。所以,< code>1:10,1:11,1:12,< code>1:11,1:10,1:12和< code>1:12,1:11,1:10都是等价的。 < li >此外,如果< code>Shared_CP中仅包含一个元素,则应为其分配组号< code>NA。 < li >列< code>CP的值不相关。

一种可能的答案是使用<code>数据。表是

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行分配给匹配组2。

对于每一行,Shared_CP被拆分为多个片段,强制到字符基因组位置的向量,这些位置被排序并再次组合到字符密钥中。该密钥存储在临时列tmp中。Shared_CPid number匹配是通过在有序版本的tmp上应用rleid()函数创建的,从而跳过tmp不包含", "的行,即Shared_CP仅由一个元素组成。最后,tmp被删除。

管道(来自软件包magrittr)和链接(来自data.table)用于提高可读性。

 类似资料:
  • 我有两个熊猫数据框 步骤1:根据df1中唯一的“val”在df2中创建列,如下所示: 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'c

  • 我有两个bean类--乡村和城市。我需要在乡村班保留城市名单。另外,当我设置城市信息时,我需要设置国家名称,所以在城市类中也需要国家。怎么做?以下是代码: country.java

  • 我试图在Spark Dataframe中创建一个列,如果列的行位于单独的Dataframe中,则为标志。 这是我的主Spark Dataframe() 这是我的引用(),这个引用中有数百行,所以我显然不能像这个解决方案或这个解决方案那样硬编码它们 我已经尝试了下面的代码,但我不明白图片中的错误是什么意思。

  • 我现在制作了一个arraylist并返回它,就像在一个void中一样。现在我得到了这样的东西,我知道我必须更改静态void t其他东西才能返回它,但我丢失了该版本的代码。 如何使用已填充的列表从一个空到另一个空?问题不在于ArrayList的填充或我在声明ArrayList时犯的任何错误,而在于如何使用返回的列表

  • 我正在尝试将标记对象用于我的flatter插件。使用MethodChannel,我可以调用Java函数,但我的标记对象仍然为null。我如何正确地创建此意图? 我的猜测是不能以这种方式创建意图,这就是为什么它为标记返回空对象的原因。

  • 我有一个数据集DF,其中包括USER和DATETIME两列(列索引不在我的数据中。它是输出应该是什么样子)。DF中的行显示了每一分钟的活动。我想要的是创建并填充一个名为“index”的列。这个索引是显示等于或小于4分钟的活动。换句话说,如果第i行的DATETIME与其后面的第i 1行之间的差异小于或等于4分钟,则它们在同一个索引中(即在同一个活动中)。但是,如果这个差异大于4分钟,下一行(i 1)