2

我有一个数据框,其中有两列联系字符串。在一列(名为probes)中,我有重复的案例(即具有相同字符串的多个案例)。对于探测中的每个案例,我想找到包含相同字符串的所有案例,然后将第二列(名为genes)中所有相应案例的值合并为一个案例。例如,如果我有这个结构:

    probes  genes
1   cg00050873  TSPY4
2   cg00061679  DAZ1
3   cg00061679  DAZ4
4   cg00061679  DAZ4

我想把它改成这样的结构:

    probes  genes
1   cg00050873  TSPY4
2   cg00061679  DAZ1 DAZ4 DAZ4

显然对于使用 which 的单个探针执行此操作没有问题,然后粘贴和折叠

ind<-which(olap$probes=="cg00061679")
genename<-(olap[ind,2])
genecomb<-paste(genename[1:length(genename)], collapse=" ")

但我不确定如何在整个数据帧中提取探针列中重复项的索引。有任何想法吗?

提前致谢

4

2 回答 2

4

您可以tapply在基础 R中使用

data.frame(probes=unique(olap$probes), 
           genes=tapply(olap$genes, olap$probes, paste, collapse=" "))

或使用 plyr:

library(plyr)
ddply(olap, "probes", summarize, genes = paste(genes, collapse=" "))

更新

在第一个版本中这样做可能更安全:

tmp <- tapply(olap$genes, olap$probes, paste, collapse=" ")
data.frame(probes=names(tmp), genes=tmp)

以防万一 unique 以不同的顺序给探针tapply。就我个人而言,我会一直使用ddply.

于 2012-08-21T12:33:25.513 回答
3

Base Raggregate()应该可以正常工作:

aggregate(genes ~ probes, data = olap, as.vector)
#       probes            genes
# 1 cg00050873            TSPY4
# 2 cg00061679 DAZ1, DAZ4, DAZ4

as.vector如果我需要对数据做任何进一步的工作,我更喜欢(这会将genes列存储为,但如果您更喜欢它是字符串list,也可以尝试。aggregate(genes ~ probes, data=test, paste, collapse=" ")

于 2012-08-21T13:09:00.140 回答