隔离具有以所需方式排列的列的表中的行

时间:2013-07-23 11:49:39

标签: r dataframe ranking tabular

我有一个制表符描述表,其中最后三列包含统计值,我想只检索列以所需方式排列的行。我感兴趣的行是列中的值被排名为A_C> A_B> B_C的行。

以下是该表的示例:

marker  chr A_B A_C B_C
rs1000073   1   0.097328991622858   0.101954778294364   0.0155614929271569
rs1000283   1   0.194891573233045   0.0612572864045251  0.0287416461802493
rs1000352   1   0.146693199204067   0.166583183464355   -0.00301950205401285
rs1000451   1   0.116693199204067   0.266583183464355   0.00401950205401285

所以在这种情况下,我只想检索rs1000352和rs1000073行(实际表中有超过一百万行,但你明白了。)

从那里我将把感兴趣的行写成一个新的制表符分隔文本文件(我知道如何做这部分)。

有没有人对如何做到这一点有任何建议?

3 个答案:

答案 0 :(得分:2)

您的意思是(使用read.table初始化my.df后):

my.df.new <- subset(my.df, (A_C>A_B) & (A_B>B_C))

(...似乎也会返回rs1000451,但似乎是有意的。)

答案 1 :(得分:2)

一个data.table解决方案,语法糖!:

DT <- data.table(dt)
dt <- DT[(A_C>A_B) & (A_B>B_C)]

您甚至可以直观地检查结果:

library(reshape2)
dtl <- melt(dt)
library(ggplot2)
ggplot(subset(dtl,variable!='chr'))+
  geom_point(aes(marker,value,color=variable),size=5)
ggplot(subset(dtl,variable!='chr'))+
  geom_point(aes(marker,value,color=reorder(variable,value)),size=5)

enter image description here

答案 2 :(得分:1)

如果你想获得行的索引,可以选择另一种方法:

df<- data.frame(marker = c('rs1000073','rs1000283','rs1000283', 'rs1000352'), A_B= c(0.097328991622858, 0.194891573233045, 0.146693199204067, 0.116693199204067), 
            A_C= c(0.101954778294364,0.0612572864045251,0.166583183464355,0.266583183464355), B_C = c(0.0155614929271569, 0.0287416461802493,  -0.00301950205401285,0.00401950205401285))
i<- which((df$A_C>df$A_B )& (df$A_B>df$B_C))