选择/排序表R中的值

时间:2012-12-05 00:11:44

标签: r

我正在 R 中使用以下数据集进行代谢组学研究。

first Name      Area    Sample Similarity

120   Pentanone 699468  PO4:1   954

120   Pentanone 153744  PO2:1   981

126   Methylamine 83528 PO4:1   887

126   Unknown     32741 PO2:1   645

126   Sulfurous 43634   PO1:1   800

我希望能够在第一列中,在具有相同值(例如120)的rowns中选择具有相同名称的化合物(例如pentanone)。从这个选择我想复制对应于最高相似性的行信息,并在表中创建新列。在这种情况下,以下信息:

120 Pentanone   153744  PO2:1   981

我知道“发送给我的代码帖子”并不是非常感激,我非常感谢有关如何开始的一些线索。

2 个答案:

答案 0 :(得分:2)

您可以使用plyr包:

我重现你的数据(下次尝试使用dput(dat))

dat <- read.table(text ='first Name      Area    Sample Similarity
120   Pentanone 699468  PO4:1   954
120   Pentanone 153744  PO2:1   981
126   Methylamine 83528 PO4:1   887
126   Unknown     32741 PO2:1   645
126   Sulfurous 43634   PO1:1   800',header=TRUE)
  1. 我将data.frame拆分为(first&amp; Name)
  2. 我应用每组行的功能
  3. 我汇总了一个新的data.frame

    library(plyr)   
    ddply(dat,.(first,Name),function(x) x[x$Similarity==max(x$Similarity),])
    
    
    
    first        Name   Area Sample Similarity
    1   120   Pentanone 153744  PO2:1        981
    2   126 Methylamine  83528  PO4:1        887
    3   126   Sulfurous  43634  PO1:1        800
    4   126     Unknown  32741  PO2:1        645
    

答案 1 :(得分:1)

有很多选择。您已经有一个使用plyr的示例;还有两个。

基础R方法,使用aggregatemerge

merge(dat, aggregate(Similarity ~ first + Name, dat, max))
#   first        Name Similarity   Area Sample
# 1   120   Pentanone        981 153744  PO2:1
# 2   126 Methylamine        887  83528  PO4:1
# 3   126   Sulfurous        800  43634  PO1:1
# 4   126     Unknown        645  32741  PO2:1

sqldf方法:

library(sqldf)
sqldf("select *, max(Similarity) `Similarity` from dat group by first, Name")
#   first        Name Similarity   Area Sample
# 1   120   Pentanone        981 153744  PO2:1
# 2   126 Methylamine        887  83528  PO4:1
# 3   126   Sulfurous        800  43634  PO1:1
# 4   126     Unknown        645  32741  PO2:1