如何根据另一个变量

时间:2016-07-18 22:31:39

标签: r ranking permutation dataframe

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

# 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  

现在,我想为每个GeneId TrID选择具有较高PSI值的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值和dplyr值,以便对分布进行控制。

1 个答案:

答案 0 :(得分:1)

您可以使用基数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])