2012-04-30 11 views
0

私は長い形式のデータセットを持ち、ReshapeまたはReshapeより前の任意の前処理を使用してデータをワイドフォーマットに変換したいと考えています。難しいのは、 "value"変数が数値でないことです。オリジナルのデータにも正当な重複レコードがあることに注意してください。次のコードは、それぞれのデータレイアウトを示しています。Reshapeで数値以外の変数を集計する

id = c(1, 1, 1, 1, 1, 1, 1) 
month <- c("jan", "feb", "feb", "march", "april", "april", "april") 
stress <- c("mild", "mild", "high", "moderate", "mild", "high", "mild") 
Longdata <- data.frame(id, month, stress, stringsAsFactors = FALSE) 

これをオリジナルのフォーマットです:

> Longdata 
    id month stress 
1 1 jan  mild 
2 1 feb  mild 
3 1 feb  high 
4 1 march moderate 
5 1 april  mild 
6 1 april  high 
7 1 april  mild 

これは私がデータを整理整頓したい方法です:

id <- c(1) 
jan <- c("mild") 
feb <- c("mild-high") 
march <- c("moderate") 
april <- c("mild-high-mild") 
widedata <- data.frame(id, jan, feb, march, april, stringsAsFactors = FALSE) 
> widedata 
    id jan  feb march   april 
1 1 mild mild-high moderate mild-high-mild 

答えて

0

あなたが最初aggregateを使用して、2つの段階でこれを行うことができ、 2番目は "reshape2"パッケージのベースR reshapeまたはdcastのいずれかを使用します。

  1. 凝集工程:

    Mediumdata <- aggregate(stress ~ id + month, Longdata, paste, collapse="-") 
    Mediumdata 
    # id month   stress 
    # 1 1 april mild-high-mild 
    # 2 1 feb  mild-high 
    # 3 1 jan   mild 
    # 4 1 march  moderate 
    
  2. 整形ステップ:

    # Using base R reshape 
    reshape(Mediumdata, direction="wide", idvar="id", timevar="month") 
    # id stress.april stress.feb stress.jan stress.march 
    # 1 1 mild-high-mild mild-high  mild  moderate 
    
    # Using `dcast` from "reshape2" 
    dcast(mediumdata, id ~ month, value.var="stress") 
    # id   april  feb jan march 
    # 1 1 mild-high-mild mild-high mild moderate 
    
関連する問題