2013-07-02 87 views
0

我有data.frame,它的开始低于:R:如何通过data.frame删除数据过滤的条目

 gene   snp  pval best_snp best_pval 
1 ENSG00000007341 rs2932538 5.6007 rs17030613 10.0542 
2 ENSG00000064419 rs10488631 7.7461 rs4728142 24.6101 
3 ENSG00000064419 rs12531711 7.7449 rs4728142 24.6101 
4 ENSG00000064419 rs12537284 4.5544 rs4728142 24.6101 
5 ENSG00000064666 rs3764650 12.3401 rs3752246 5.4001 
6 ENSG00000072682 rs10479002 5.0141 rs12521868 21.1550 

如图所示,在2-4行相同的基因是重复。对于重复的基因,我只想保留行的best_snpbest_pval的值,即出现基因第一个,因此第2行;和第3行& 4我想删除best_snpbest_pval值,因为它与上面相同。

如果一个基因没有重复,那么就把它保留原样。

请记住,该表比所示的要大得多,并且这些基因在随机位置重复。

回答

1

如果DF是你的data.frame:

library(plyr) 
ddply(df,.(gene),function(x) {x[-1,c("best_snp","best_pval")] <- NA 
return(x)}) 
+0

这里的任务是针对每个组,当组数太多(其中只有少数重复条目)时,可能效率不高。 – Arun

1

我假设通过,您的意思是data.frame。如果是这样,如果z是您的data.frame:

z[match(unique(z$Best_SNP), z$Best_SNP),] 

基于阿伦的回答和链接到您的其他问题。这听起来像你真的想保持行,但东西代替重复的(?像NA),它可以用做:

z2 <- z 
z2[duplicated(z2$Best_SNP),c("Best_SNP","Best_Pval")] <- NA 
+0

喜谢谢。但是这会删除重复基因的行,所以删除了第3和第4行。我想保留所有的行,但只是删除重复基因行的best_snp和best_pvalues。 – zfz

+0

查看更新。我已经添加了一个解决方案,它们被“NA”取代......但这个价值可能是任何东西。 – Thomas