我有一个数据框,它有两列相互接触的字符串。在一个列(名为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显然,对于使用哪个探测器的单个探测器,执行此操作没有问题,然后粘贴和折叠
ind<-which(olap$probes=="cg00061679")
genename<-(olap[ind,2])
genecomb<-paste(genename[1:length(genename)], collapse=" ")但我不确定如何在整个数据帧中提取probes列中重复项的索引。有什么想法吗?
提前感谢
发布于 2012-08-21 20:33:26
可以在base R中使用tapply
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-21 21:09:00
Base R aggregate()应该可以很好地执行以下操作:
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=" ")。
https://stackoverflow.com/questions/12054816
复制相似问题