2017-01-12 42 views
0

以下の表があります。すべてvalue >= 0.1の行を抽出したいと思います。 どうすればいいですか?条件付き行の抽出R

マトリックス:

gene Sample A  Sample B   Sample C 
gene1 28.76975267 18.47245374  24.14395137 
gene2 0    0    0.13841512 
gene3 31.06797745 36.00742451  61.29714172 

私は必要な行列:

gene Sample A  Sample B  Sample C  
gene1 28.76975267 18.47245374 24.14395137 
gene3 31.06797745 36.00742451 61.29714172 
+1

0.1を使用すると、*すべて*値> = 0.1持つ意味ですか? – doctorlove

答えて

3

我々は、論理インデックスを作成するためにrowSumsを使用し、その

df1[rowSums(df1[-1] >= 0.01)==3,] 
# gene SampleA SampleB SampleC 
#1 gene1 28.76975 18.47245 24.14395 
#3 gene3 31.06798 36.00742 61.29714 

それとも別に基づいて行をサブセットすることができますオプションはReduce&

です
df1[Reduce(`&`, lapply(df1[-1], `>=`, 0.01)),] 

注:これは、あなたが含まれているすべての行を取り除きたい意味と仮定している

data <- data[which(data$sampleA >= 0.01 & data$sampleB >= 0.01 & data$sampleC >= 0.01), ] 

:ソリューションの両方がベクトル化されたソリューションです

1

1つの可能な方法は、次のコードを使用することです少なくとも1つの値は< 0.01?

MWE:

data <- data.frame(sampleA = c(28.76, 0, 31.06), 
        sampleB = c(18.42, 0, 36.01), 
        sampleC = c(24.14, 0, 36.01)) 

data <- data[which(data$sampleA >= 0.01 & 
        data$sampleB >= 0.01 & 
        data$sampleC >= 0.01), ] 
print(data) 

# sampleA sampleB sampleC 
# 1 28.76 18.42 24.14 
# 3 31.06 36.01 36.01 
+0

こんにちは、私はこれを行いましたが、結果は次のようになりました:データ [1]遺伝子SampleA SampleB SampleC <0 rows>(または長さ0の行番号) – Mousumi

+0

こんにちはこれは、あなたの列が数値形式でないか、 $拡張の後に間違った列名を使用しています。 –

+0

私は答えにMWEを提供します。 –

2

我々は、インデックス1でapplyを使用して、行のすべての値がかどうかを確認することができます> =

df[apply(df[-1], 1, function(x) all(x >= 0.01)), ] 

# gene SampleA SampleB SampleC 
#1 gene1 28.76975 18.47245 24.14395 
#3 gene3 31.06798 36.00742 61.29714