9

私はRが初めてで、この概念を理解できません。都市、人口、夏の平均気温の 3 つの列を持つ "places" という名前のテーブルがロードされているとします。

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

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

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

4

2 に答える 2

20

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

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" ]

列名は、サブセット内または "$" 演算子の後に引用されていませんが、"[[" 内で引用されていることに注意してください。また、データの行が一致しない場合、使用すると危険になる可能性があることに注意してくださいwhich。行を取得する代わりに、データフレーム全体を取得するためです。

于 2013-01-07T23:31:41.017 に答える
14

あなたは探している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]
于 2013-01-07T23:04:38.213 に答える