2016-04-13 12 views
0

私はRabbit、Catなどの動物にちなんで名付けられた列でR(「動物」と呼ぶことができます)のデータフレームを持っています。変数を使用して各列の条件でRのデータフレームをサブセット化

| Rabbit | Cat | Frog | Cow | Dog | 
|--------|-----|------|-----|-----| 
| 0  | 1 | 1 | 0 | 1 | 
| 0  | 0 | 3 | 1 | 4 | 
| 2  | 1 | 0 | 0 | 0 | 

リストには何百もの行があり、さらに多くの動物(列)があります。

Iは、Iがウ​​サギ> 0

まず私が試した動物においてのみ行のサブセットウサギデータフレームを望んでその数は例えば0より大きい各動物について、このデータフレームのサブセットを利用したいです変数「種」を作成する。そして、

species <- "Rabbit" 

を、私は)(dplyrのフィルタを用いて動物のデータフレームのサブセットを試みた:

Rabbits <- filter(Animals, species >= 1) 

これはWORませんでしたkはfilter()が "Rabbit"ではなく "species"という名前のカラムを探していたからです。

私はすべての動物の名前のベクトルをループし、それらを対応するデータフレームにサブセット化することでプロセスを自動化したいと思っています。

もっと効率的なアプローチがありますか?

私は非常にRに慣れているので、ELI5の説明は理解できます。ありがとうございました!

答えて

1

[]構文を使用して、名前で列にアクセスできます。

toKeep <- Alimals[species] >= 1 

、その後

Rabbit <- Animals[toKeep,] 
+0

すばやくお返事ありがとうございます。それは私が望むものに近いですが、問題はウサギのウサギの代わりに変数を使用したい>ということです。私。私は種> = 1、種< - "うさぎ"を望む。私は種の変数を使用したいので、私はすべての動物を見ることを望むこの方法です。それは可能ですか?ありがとう! – hpy

+1

もう1つの解決方法は、reshape2パッケージを使用してデータを変換して、動物(ウサギ、猫など)と動物の数の2つの列のみを持つようにすることです。 – mb14

+0

更新された答えをありがとう、それは働いた! – hpy

1

ここで渡される列によって各サブセットをdata.framesのリストを作成する方法です:

datasets <- lapply(colnames(mtcars), function(v) subset(mtcars, mtcars[,v] > 0)) 

ちょうどあなたの種変数にcolnames(mtcars)を変更、 data.frameにmtcarsを追加してください。

+0

ありがとうございます。正直言って、私はまだ機能の適用ファミリについては本当に緊張している、私は決して使用する方法や方法を把握することはできません。これ以上の作業が必要になります。 – hpy

+1

学習に値する!それらは、使用して実験する安全な機能です。 lapplyはリスト(data.frames)でうまく動作します。私はそれが 'assign'を使ってはるかに安全な方法だと思います。 – Zelazny7

+0

ありがとう@ Zelazny7!私はこれらの関数への良いELI5イントロを探して、それらの演習でいくつかのチュートリアルを見つけようとします。 – hpy

関連する問題