拆分和配对两列的值

时间:2016-07-19 04:43:43

标签: r split row bioinformatics

我有一个这样的数据框:

Entry name  Gene names
A1BG_HUMAN      A1BG
M0R009_HUMAN    A1BG
F8W9F8_HUMAN    A1CF
Q5T0W7_HUMAN    A1CF
A1CF_HUMAN      A1CF ACF ASP
H0YFH1_HUMAN    A2M
A2MG_HUMAN      A2M CPAMD5 FWP007

在第1列中我有蛋白质名称,在第2列中我有相关基因。在一些蛋白质的前面可以看到多个基因名称,它们基本上是该细胞中第一个基因的别名(以1个空格分隔)。

我想将此数据集转换为每个蛋白质名称与不同基因名称配对的表单,这样我就像这样:

Entry name  Gene names
A1BG_HUMAN      A1BG
M0R009_HUMAN    A1BG
F8W9F8_HUMAN    A1CF
F8W9F8_HUMAN    ACF
F8W9F8_HUMAN    ASP
Q5T0W7_HUMAN    A1CF
Q5T0W7_HUMAN    ACF
Q5T0W7_HUMAN    ASP
A1CF_HUMAN      A1CF
A1CF_HUMAN      ACF
A1CF_HUMAN      ASP
H0YFH1_HUMAN    A2M
H0YFH1_HUMAN    CPAMD5
H0YFH1_HUMAN    FWP007
A2MG_HUMAN      A2M
A2MG_HUMAN      CPAMD5
A2MG_HUMAN      FWP007

我知道如何将具有多个条目的细胞分成不同的行,但我不确定如何将第一列中的蛋白质与基因的不同别名配对。

有人知道怎么做吗?

  

编辑:我不想只将数据拆分成不同的行。所以cSplit实际上并没有帮助我。让我举一个例子:

     

在A1CF_HUMAN前面,引入了不同的A1CF基因别名(ACF和ASP)。我想不仅将A1CF_HUMAN与ACF& ASP,还将与A1CF基因(F8W9F8_HUMAN& Q5T0W7_HUMAN)相关的其他蛋白质与ACF& ASP也是如此。请看看我想要的内容,以便更好地了解我正在寻找的内容。我不认为可以通过一个命令来完成。

2 个答案:

答案 0 :(得分:2)

假设第一个元素始终是'key'而其余的是别名,拆分基因名称,识别密钥,然后按键对所有别名进行分组,并标准化每个元素以包含别名

elts = strsplit(df$Gene_names, " ")
keys = sapply(elts, "[[", 1)
values = split(unlist(elts), rep(keys, lengths(elts)))
df$Gene_names = lapply(values, unique)[keys]

使用每个标准化基因名称的长度复制条目名称,并将这些名称与未列出的拆分基因名称相匹配

data.frame(
    Entry_name = rep(df$Entry_name, lengths(df$Gene_names)),
    Gene_name = unlist(df$Gene_names))

答案 1 :(得分:0)

我们可以将 override func update(currentTime: CFTimeInterval) { soldierTorso.position = soldierLegs.position } cSplit一起使用。我们转换了' data.frame'到' data.table' (data.table),从' Gene_names'提取第一个单词(来自setDT(df)的{​​{1}}也应该有效)。使用word(Gene_names,1),使用stringr获取逻辑索引,我们使用逻辑向量的累积和作为分组变量,并分配" Gene_names"到具有最长字符的那个。然后,使用sub将其转换为' long'格式。

duplicated

数据

cSplit