我创建了一个如下所示的数据框:
# 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
值,以便对分布进行控制。
答案 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])