2013-07-23 27 views
0

我有一个选项卡描述表,其中最后三列包含统计值,并且我想只检索其中列以所需方式排列的行。我感兴趣的行是那些列中的值按照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行(实际表中有超过一百万行,但你得到这个想法)。

从那里我将感兴趣的行写入一个新的标签删除文本文件(我知道如何做这部分)。

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

+0

'read.table'和'write.table'? – Thomas

+0

@Thomas在这个评论中可以帮助OP? “我知道如何做这部分”?我想你想念这个问题。 – agstudy

+1

@agstudy我错过了“我知道该怎么做”(重新写作),但是OP仍然没有向我们展示他们实际尝试过的东西。 – Thomas

回答

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

你的意思是这个(使用read.table后,初始化my.df):

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

(...这似乎也回到rs1000451,但它似乎是一种意)

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))