Rで作業すると、以下と同様の構造のデータがあります(コードブロック1)。そして、次の特性を持つ新しい data.frame を作成しようとしています:
一意の ID_1 値ごとに、2 つの新しい列が必要です。1 つは (ID_1 と方向 ==1 を共有する ID_2) のリストを含み、もう 1 つの列は (ID_1 と方向を共有する ID_2s ==0) のリストを含みます。 )、(次のコード ブロック 2 を参照)
データセット ブロック 1 (初期):
ID_1 ID_2 Direction
100001 1 1
100001 11 1
100001 111 1
100001 1111 0
100001 11111 0
100001 111111 0
100002 2 1
100002 22 1
100002 222 0
100002 2222 0
100003 3 1
100003 33 1
100003 333 1
100003 3333 0
100003 33333 0
100003 333333 1
100004 4 1
100004 44 1
に変えた:
データセット ブロック 2 (目的の出力):
ID_1 ID_2_D1 ID_2_D0
100001 1,11,111 1111,11111,111111
100002 2,22 222,222
100003 3,33,333,333333 3333,33333
100004 4,44
私はこれを行うコードを持っています (サブセットのサブセットのループを取る) が、これを何百万もの一意の "ID_1" で実行しているため、非常に時間がかかります (何時間もかかります!!)。
アドバイス - おそらく apply() または plyr() パッケージを使用して、これをより高速に実行できますか?
参照用のコード:
DF <- data.frame(ID_1=c(100001,100001,100001,100001,100001,100001,100002,100002,100002,100002,100003,100003,100003,100003,100003,100003,100004,100004)
,ID_2=c(1,11,111,1111,11111,111111,2,22,222,2222,3,33,333,3333,33333,333333,4,44)
,Direction=c(1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1)
)
私の現在の(遅すぎる)コード:
DF2 <- data.frame( ID_1=DF[!duplicated(DF$ID_1),][,1])
for (i in 1:length(unique(DF2$ID_1))){
DF2$ID_2_D1[i] <- list(subset(DF,ID_1==unique(DF2$ID_1)[i] & Direction==1)$ID_2)
DF2$ID_2_D0[i] <- list(subset(DF,ID_1==unique(DF2$ID_1)[i] & Direction==0)$ID_2)
}