これが私の問題です。20 万行のデータセットがあります。
- 各行は、被験者に対して実施されたテストに対応しています。
- 被験者のテスト数は等しくありません。
- 各テストには日付が付けられています。
各テストにインデックスを割り当てたい。例: 被験者 1 の最初のテストは 1、被験者 1 の 2 番目のテストは 2、被験者 2 の最初のテストは 1 などです。
私の戦略は、一意のサブジェクト ID のリストを取得し、lapply を使用して、一意のサブジェクト ID を使用してデータセットをデータフレームのリストにサブセット化し、各サブジェクトがテストを実行した独自のデータフレームを持つようにすることです。理想的には、各被験者の各データフレームをソートし、各テストにインデックスを割り当てることができます.
ただし、これを 200k x 32 データフレームで実行すると、ラップトップ (i5、Sandy Bridge、4GB RAM) のメモリがすぐに不足してしまいました。
2 つの質問があります。
- これを行うより良い方法はありますか?
- そうでない場合、メモリ制限を克服する唯一の方法は、一意の SubjectID リストをリストごとに 1000 件の SubjectID などの小さなセットに分割し、データセット全体にラップして、すべての最後にリストを結合することです。次に、パーティションの数を示す整数を指定して SubjectID リストを分割する関数を作成するにはどうすればよいですか。たとえば、BreakPartition(Dataset, 5) は、データセットを 5 つのパーティションに均等に分割します。
ダミーデータを生成するコードは次のとおりです。
UniqueSubjectID <- sapply(1:500, function(i) paste(letters[sample(1:26, 5, replace = TRUE)], collapse =""))
UniqueSubjectID <- subset(UniqueSubjectID, !duplicated(UniqueSubjectID))
Dataset <- data.frame(SubID = sample(sapply(1:500, function(i) paste(letters[sample(1:26, 5, replace = TRUE)], collapse ="")),5000, replace = TRUE))
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d.%m.%Y')), 5000, replace = TRUE)
Dataset <- cbind(Dataset, Dates)