从列值过滤行名称中的数据框

时间:2012-10-18 04:50:06

标签: r filtering dataframe

基本上我的数据框有两列(target_idfpkm)。我想只在第一列中保留那些不重复的行名称 例如,在下面的数据框中,您可以看到有两个具有相同名称(几乎)comp267138_c0_seq1 comp267138_c0_seq2的行名称,并且两者都有,并且我希望仅根据高值保留一个comp267138_c0_seq2在第2栏。

       target_id        fpkm
comp247393_c0_seq1    3.197885
comp257058_c0_seq4    1.624577
comp242590_c0_seq1    1.750319
comp77911_c0_seq1     1.293059
comp241426_c0_seq1    1.626589
comp288413_c0_seq1   14.828853
comp294436_c0_seq1   11.555596
comp63603_c0_seq1     1.982386
comp267138_c0_seq1    8.594494
comp267138_c0_seq2   11.134958
comp321623_c0_seq1    6.934149

1 个答案:

答案 0 :(得分:1)

您似乎只想考虑target_id的一部分(前两个组件,按_分割)

如果您data.frame被称为DT

# create   column without the _seqx part
DT$new_id <- sapply(lapply(strsplit(as.character(DT[['target_id']]), '_'), head, 2),
              paste, collapse = '_')
library(plyr)


ddply(DT, .(new_id), function(x) x[which.max(x$fpkm),])