1

大規模なデータセット (350 万行と 40 列) を扱っており、いくつかの値を消去する必要があるため、データに基づいてモデルを作成するときに必要な他のパラメーターを計算できるようになります。

問題は、これまで使用してきた for ループを適用するのに永遠に時間がかかることです。そのため、ff パッケージを使用してみようと思いました。データフレームはデータと呼ばれ、銀行の一連の顧客情報で構成されています。.csv ファイルとしてインポートされました。私がする必要があるのは、AverageStanding 変数が負の場合、すべての顧客 (Serial というラベルが付いている) を削除することです。

> ffd<-as.ffdf(data)
> lastserial = tail(ffd$Serial,1)
> for(k in 1:lastserial){
+   tempvecWith <- vector()
+   tempvecWith <- ffd[ffd$Serial==k, ]$AverageStanding
+   if(any(tempvecWith < 0)){
+     ffd_clean<- ffd[!ffd$Serial ==k, ]
+   }
+ }

これは私が受け取っているエラーです:

Error in as.hi.integer(x, maxindex = maxindex, dim = dim, vw = vw, pack = pack) : 
NAs in as.hi.integer

これらのエラーを回避する方法についてのアイデアはありますか?

4

1 に答える 1

1

エラーはコードのこの部分から発生しますffd[ffd$Serial==k, ]。つまりffd$Serial==k、ff 論理ベクトルを返します。ただし、ff ベクトルまたは ffdf のインデックスまたはサブセットを作成する場合は、論理値のベクトルではなく、インデックス番号を指定する必要があります。パッケージ ffbase の ffwhich を使用して、論理値の ff ベクトルをインデックス番号の ff ベクトルに変換できます。

あなたの質問については、この種のコードを探していると思います(データを提供しなかったため、テストされていません)。

require(ffbase)
idx <- ffd$AverageStanding < 0
idx <- ffwhich(idx, idx==TRUE)
open(ffd)
serials.with.negative <- ffd$Serial[idx]
serials.with.negative <- unique(serials.with.negative)
ffd$is.customer.with.negative.avgstanding <- ffd$Serial %in% serials.with.negative

idx <- ffd$is.customer.with.negative.avgstanding == FALSE
idx <- ffwhich(idx, idx==TRUE)
open(ffd)
ffd_clean <- ffd[idx, ]
于 2013-08-23T07:24:56.047 に答える