2013-07-02 161 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