如何select根据另一个变量的量化值进行最佳排序

How to select the best rank according to quantitative values of another variable

我创建了一个如下所示的数据框:

# Dataframe
GeneID              TrID                PSI  Length Ranking  
ENSMUSG00000089809  ENSMUST00000146396  0.20 431801  3     
ENSMUSG00000089809  ENSMUST00000161516  0.23 354036  2  
ENSMUSG00000089809  ENSMUST00000161148  0.57   5601  1  
ENSMUSG00000044681  ENSMUST00000117098  0.05   4400  2  
ENSMUSG00000044681  ENSMUST00000141196  0.10   1118  1  
ENSMUSG00000044681  ENSMUST00000141601  0.75  44973  5  

现在我想 select 每个 GeneId 具有较高 PSI 值的 TrID 和相应的 Ranking。最后的输出将是这样的:

# Desired Output Dataframe
GeneID             TrID               PSI Length Ranking     
ENSMUSG00000089809 ENSMUST00000161148 0.57  5601 1      
ENSMUSG00000044681 ENSMUST00000141601 0.75 44973 5      

之后,我将创建 ranking 值的分布并检查排名对应的 PSI 值。我将排列 Length 值和 TrID 值以执行分布控制。

您可以使用基础 R 并执行:

byGeneId = split(1:nrow(Dataframe), Dataframe$GeneId)
whichTopPsi = sapply(byGeneId, function(i) i[which.max(Dataframe[i,'PSI'])])
Dataframe[whichTopPsi,]

您也可以使用更通用的 ddply

require(plyr)
ddply(Dataframe, "GeneId", function(d) d[which.max(d[,'PSI']),,drop=FALSE])