「ITEM」の値を列と値 (「ITEM2」) としてロングフォーマットからワイドフォーマットにデータ (data.frame) をキャストしたい (以下を参照):
長い形式:
ワイドフォーマット:
したがって、パッケージ reshape2 の dcast-function を使用します。
df <= dcast(df,SEQUENCEID + EVENTID ~ ITEM, value.var="ITEM2")
これを行うと、すべて正常に動作します。しかし、データ フレームに 7m のデータ レコードがあり、メモリの制限に苦労していました。したがって、パッケージ plyr の ddply を使用することにしました。
すべての分割に同じ順序で同じ列があることを確認するために、事前に「ITEM」から値を抽出し、存在しない場合は列に N/A を追加し、すべての列をアルファベット順に並べます。
コード全体の下:
#Example data
lo_raw <- data.frame(SEQUENCEID=rep(1546842, 10),
EVENTID=c(5468503146,5468503146,5468503146,5468503147,5468503147,5468503148,5468503148,5468503148,5468503148,5468503148),
ITEM =c("cakes","limonade","coffee","coffee","juice","limonade","cakes","water","fruits","vegetable"),
ITEM2=c("cakes","limonade","coffee","coffee","juice","limonade","cakes","water","fruits","vegetable"),
SPLIT=rep(1547000, 10))
#Extract items
item <- as.character(unique(lo_raw$ITEM))
#Function dcast
castff <- function(df,item){
df = dcast(df, SEQUENCEID + EVENTID ~ ITEM, value.var="ITEM2")
for(i in item){
if (!(i %in% colnames(df))){
df[,i] <- NA
}
}
df <- df[,c(1,2,(order(colnames(df[,3:dim(df)[2]])))+2)]
df
}
#Apply dcast
df_pivot <- ddply(lo_raw, .(SPLIT), .fun=function(lo_raw,item) castff(lo_raw,item), item=item, .progress="text", .inform=TRUE)
を実行するddply
と、使用中の RAM が最大値 (12 GB) に達するまで実行時に増加します。したがって、パフォーマンスは非常に遅く、数時間後に R を終了しました。
データセット全体をキャストする別の方法はありますか?
前もって感謝します。