0

「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 を終了しました。

データセット全体をキャストする別の方法はありますか?

前もって感謝します。

4

0 に答える 0