我有一个这样的数据框:
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也是如此。请看看我想要的内容,以便更好地了解我正在寻找的内容。我不认为可以通过一个命令来完成。
答案 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