0

ロング フォーマットのデータセットがあり、Reshape または 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
4

1 に答える 1

0

これは 2 つの手順で実行できます。最初は を使用しaggregate、次にベース Rreshapeまたはdcast"reshape2" パッケージのいずれかを使用します。

  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
    
于 2012-05-06T08:03:52.853 に答える