web-dev-qa-db-ja.com

基準に基づくデータフレーム内のデータのフィルタリング

私はRを初めて使用するので、この概念を理解することができません。 「場所」と呼ばれる3つの列(都市、人口、夏の平均気温)がロードされたテーブルがあるとします。

「フィルタリング」したいとします-人口が100万人未満で、夏の平均気温が70度を超える新しいテーブルオブジェクトを作成します。

これを使用した他のプログラムではこれは非常に簡単ですが、いくつかの調査を行った後、さらに大きな混乱に陥っています。 Rの目的とそれが行うことを考えると、これはかなり単純なものでなければなりません。

上記の条件をテーブルにどのように適用しますか?どのようなステップになりますか?私が理解していることから、名前に基づいてテーブルの見出しを簡単に選択することは簡単にはできません。これは、ニースになります(例:WHERE city <1,000,000)

7
Doug Fir

「city」列に都市の名前を含むデータフレーム「dfrm」、「population」列に人口、「meanSummerT」列に夏の平均気温を指定すると、これらの共同要件を満たすサブセットのリクエストが満たされます。これらのいずれか:

subset( dfrm, population < 1e6 & meanSummerT > 70)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , ]
dfrm[ which(dfrm[['population']] < 1e6 & dfrm[['meanSummerT']] > 70) , ]

これらの共同基準を満たす都市の名前だけが必要な場合は、次のように機能します。

subset( dfrm, population < 1e6 & meanSummerT > 70 , city)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , "city" ]
dfrm[ which(dfrm[['population']] < 1e6 & dfrm[['meanSummerT']] > 70) , "city" ]

列名はサブセットでは引用されず、「$」演算子の後には引用されませんが、「[[」内で引用されます。

17
42-

subsetを探しています

データがmydataと呼ばれる場合

newdata <- subset(mydata, city < 1e6)

または、[を使用することもできます プログラム的に安全

newdata <- mydata[mydata$city < 1e6]

複数の条件については、&または|を使用してください。

sqldfパッケージを使用してsqlを使用することもできます

library(sqldf)

newdata <-  sqldf('select * from mydata where city > 1e6')

または、data.tableを使用して、[の構文を簡単にすることもできます(メモリ効率も向上します)。

library(data.table)

mydatatable <- data.table(mydata)
newdata <- mydatatable[city > 1e6]
13
mnel