0

私はRを使用して大きなcsvデータセットから情報を効率的に抽出する方法を研究してきました。多くの人がパッケージffを推奨しているようです。データセットの読み取りに成功しましたが、サブセット化しようとして問題が発生しています。

最大のデータセットには、650,000を超える行と1005の列が含まれています。すべての列に同じデータ型が含まれているわけではありません。データフレームとして表示すると、構造は次のようになります。

'data.frame':   5 obs. of  1005 variables:
 $ SAMPLING_EVENT_ID      : Factor w/ 5 levels "S6230404","S6252242",..: 2 1 3 4 5
 $ LATITUDE               : num  24.4 24.5 24.5 24.5 24.5
 $ LONGITUDE              : num  -81.9 -81.9 -82 -82 -82
 $ YEAR                   : int  2010 2010 2010 2010 2010
 $ MONTH                  : int  4 3 10 10 10
 $ DAY                    : int  97 88 299 298 300
 $ TIME                   : num  9 10 10 11.58 9.58
 $ COUNTRY                : Factor w/ 1 level "United_States": 1 1 1 1 1
 $ STATE_PROVINCE         : Factor w/ 1 level "Florida": 1 1 1 1 1
 $ COUNT_TYPE             : Factor w/ 2 levels "P21","P22": 2 2 1 1 1
 $ EFFORT_HRS             : num  6 2 7 6 3.5
 $ EFFORT_DISTANCE_KM     : num  48.28 8.05 0 0 0
 $ EFFORT_AREA_HA         : int  0 0 0 0 0
 $ OBSERVER_ID            : Factor w/ 3 levels "obs132426","obs58643",..: 3 2 1 1 1
 $ NUMBER_OBSERVERS       : Factor w/ 2 levels "?","1": 2 1 2 2 2
 $ Zenaida_macroura       : int  0 0 1 0 0

他のすべての変数は、この最後の変数、つまりさまざまな種類の鳥に類似しています。

これが私が「成功した:csvを読む:」に使用したコードです。

B2010 <- read.table.ffdf (x = NULL, “filePath&Name", nrows = -1, first.rows = 50000, next.rows = 50000)

ffdf出力について学習しようとして、dim(B2010)、str(B2010)、ls(B2010)などのコマンドラインを入力しました。dim(B2010)は適切な行数になりましたが、列は1つだけでした(レコードごとの文字列)。値をコンマで区切って)、ls(B2010)は、通常の変数リストの代わりに「[1] "physical""row.names""virtual"を出力しました。

STATE_PROVINCE ==“ California”と言うように抽出できるように、このタイプの出力を処理する方法がわかりませんか?変数が何であるかをB2010に伝えるにはどうすればよいですか?私はこれを別の見方をする必要があると思いますが、それを理解するためにあなたの助けが必要です。

私の最終的な目標は、一連のcsvデータセットをサブセット化し(1年に1つあるため)、さまざまな分析のために結果をデータフレームとして元に戻すことです。

ありがとう、ジョー

4

3 に答える 3

3

ffdf をサブセット化するには、ffbase パッケージを使用します。のように

require(ffbase)
x <- subset(B2010, BB2010$STATE_PROVINCE == “California”)
于 2012-09-14T07:45:51.723 に答える
2

最終的に、ffdf 変数の名前と型を適切に読み取り、サブセット化のためにアクセスできるようにするための解決策を見つけました。

B2010 <- read.csv.ffdf (file = "filepath/name", colClasses = c("factor", "numeric", "numeric", "integer", "integer", "integer", "numeric", rep("factor",998)), first.rows = 10000, next.rows = 50000, nrows = -1)

これは読むのに永遠にかかりましたが、うまくいったようです。つまり、データのサブセットを作成できました。次のステップ: サブセットを「通常の」データフレームや csv に保存します。

于 2012-09-18T01:06:44.087 に答える
0

?read.table.ffdf のヘルプ ページによると、read.csv.ffdf(...). 次に、Brandon が引用したページに移動します。

于 2012-09-14T00:26:34.140 に答える