私はRにほとんど慣れていないので、基本的な質問をすると申し訳ありませんが、この「単純な」問題の解決策を見つけることができません。患者のデータベース(大きなもの、2500万行、14列)があるので、いくつかあります。各「id」の行。たとえば、次の構造です。
"id" "birth_date" "treatment" "date_treatment"
123 2002-01-01 2 2011-01-03
123 2002-01-01 3 2011-10-03
124 2002-01-01 6 2009-11-07
124 2002-01-01 NA NA
... ..... ...... ........
1022 2007-01-01 4 2011-01-06
少量のRAMで作業できるようにするには、ffパッケージを使用する必要があるため、すべてのプロセスをff関数にする必要があります。そして、私は知りたいのですが、各単一の「id」について、彼/彼女が治療を受けたときの最小の「年齢」= 2または4です。したがって、各単一のIDでは、一般的なコードでは次のようになります。
if(c(2,4)の処理)then min(date_treatment --birth_date)
私はそれらの最小の「年齢」データとおそらくIDだけを保持したいと思います。
1つの解決策は次のことです。
age_c <- (data$date_treatment - data$birth_date)/365.25;
data$age_c <- age_c;
idx <- ffwhich( data, treatment %in% c(2,4) );
result <- data[idx,];
これにより、すべてのプロセスがffに保たれ、メモリの問題は発生しませんが、...各IDの最小年齢を取得する方法を見つける必要があります...ffdfdplyはそれを実行できるようです。
age_fun <- function(x){
min_ <- min.ff(x$age_c);
data.frame( age = min_);
}
result2 <- ffdfdply(x = data,
split = data$id,
FUN = function(x) age_fun(x),
BATCHBYTES = 5000,
trace=TRUE
);
これには時間がかかり、さまざまなエラーが発生します。
それに対する解決策はありますか?
SASまたはSQLで実行するのは簡単であるというのは一般的な問題ですが、Rで正しい組み合わせが見つかりません。したがって、一般的な質問は次のようになります。
非常に大きなデータセットの変数(行)の同一の値(グループ)の行-列関数を計算する方法???
ありがとう !!