2016-07-08 5 views
0

私はこの種の表をロードした(しかし、多くの、より大きな)している:Rスタジオ.CSVテーブルのサブセット

https://postimg.org/image/66qmiayj5/

誰もが、私はこれのサブセットを作ることができる方法を知っています

  • すべての列
  • の値は「はい」を持つすべての行のすべての列で「はい」を持つすべての行が、1つの「はい」と「いいえ」
  • すべての行で:とテーブルすべての列が、2つの 'いいえ'
  • など....
+1

「dput」データや質問のコードブロックで作成したデータのような再現可能なデータは、スクリーンショットにとって非常に好ましいものです。 –

+2

ようこそStackOverflowへ。これらのヒントを見て、[最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)の作成方法と[Rの素晴らしい例を作成する]( http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。おそらく、[良い質問をする]のヒント(http://stackoverflow.com/help/how-to-ask)も読む価値があるかもしれません。 – lmo

+0

@lmo確かに、完了 –

答えて

0

あなたはrowSumsを使用することができます。あなたの例:

df <- data.frame('GENES'=1:3,'STRAIN_1'=c(TRUE,TRUE,FALSE),'STRAIN_2'=c(TRUE,TRUE,FALSE),'STRAIN_3'=c(TRUE,FALSE,TRUE)) 
> df 
    GENES STRAIN_1 STRAIN_2 STRAIN_3 
1  1  TRUE  TRUE  TRUE 
2  2  TRUE  TRUE FALSE 
3  3 FALSE FALSE  TRUE 

データセットを次のようにサブセット化できます。

> df[rowSums(df[,-1])==1,] 
    GENES STRAIN_1 STRAIN_2 STRAIN_3 
3  3 FALSE FALSE  TRUE 

> df[rowSums(df[,-1])==2,] 
    GENES STRAIN_1 STRAIN_2 STRAIN_3 
2  2  TRUE  TRUE FALSE 

df[,-1]は、最初の列を除外しrowSums(df[,-1])行あたりTRUEの数を取得するようにするために使用されることに注意してください。

+0

ありがとう!私はそれを試してみます –

0

filterコマンドをdplyrとしてみてください。新しい列を作成せずにこれを行う方法がありますが、私はこのコードで何が起きているのかを明確にしたかったのです。

# Create a sample data frame 
df <- rbind(c("Yes", "Yes", "No"), 
c("Yes", "Yes", "No"), 
c("Yes", "Yes", "No"), 
c("Yes", "Yes", "No"), 
c("Yes", "No", "No"), 
c("Yes", "Yes", "Yes"), 
c("Yes", "Yes", "Yes")) 
df <- data.frame(df) 

# Create a column that counts the number of "No" values 
df$count <- rowSums(df[-1] == "No") 

# Filter for the appropriate number of "No" 
library(dplyr) 
df %>% filter(count == 0) # All "Yes" 
df %>% filter(count == 1) # One "No" 
df %>% filter(count == 2) # Two "No" 
+0

ありがとう! –