サーチ…


構文

  • 融解melt(DT, id.vars=c(..), variable.name="CategoryLabel", value.name="Value")
  • dcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)キャストdcast(DT, LHS ~ RHS, value.var="Value", fun.aggregate=sum)

パラメーター

パラメータ詳細
id.vars 保持する列をmelt
variable.name 教えてmeltカテゴリラベルと列を呼び出すためにどのような
value.name カテゴリラベルに関連付けられた値を持つ列を何に呼び出すかをmelt伝える
value.var 列にキャストする値の場所をdcastに通知します
一意のレコード識別子(LHS)を形成するためにどの列を保持するか、カテゴリラベル(RHS)を保持する列をdcastする
楽しいキャスト演算が各セルの値のリストを生成するときに使用する関数を指定する

備考

モデルやビジュアライゼーションを構築するためのデータの調整には、 data.tableすることができます。他のオプションと比較して、 data.tableは速度と柔軟性の利点を提供します。

data.tableで表形式のデータをピボット/アンピボットする - I

ワイドフォームからロングフォームへの変換

data USArrests datasetsからdata USArrestsをロードしdata USArrests

data("USArrests")
head(USArrests)

           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

?USArrests?USArrests?USArrestsしてください。まず、 data.tableに変換しdata.table 。状態の名前は元のdata.frame行名data.frame

library(data.table)
DT <- as.data.table(USArrests, keep.rownames=TRUE)

これは広い形式のデータです。各変数の列があります。データは情報を失うことなく長い形式で保存することもできます。長いフォームには、変数名を格納する1つの列があります。次に、変数値の別の列があります。長い形のUSArrestsはそうそうです。

            State    Crime  Rate
  1:       Alabama   Murder  13.2
  2:        Alaska   Murder  10.0
  3:       Arizona   Murder   8.1
  4:      Arkansas   Murder   8.8
  5:    California   Murder   9.0
 ---                             
196:      Virginia     Rape  20.7
197:    Washington     Rape  26.2
198: West Virginia     Rape   9.3
199:     Wisconsin     Rape  10.8
200:       Wyoming     Rape  15.6

私たちは、幅広いフォームから長いフォームに切り替えるためにmelt機能を使用します。

DTm <- melt(DT)
names(DTm) <- c("State", "Crime", "Rate")

デフォルトでは、 meltは数値データを持つすべての列を値を持つ変数として扱います。 USArrestsでは、変数UrbanPopは州の都市人口の割合を表します。それは、10万人あたりに報告されている暴力犯罪である他の変種、 MurderAssaultRapeとは異なります。 UrbanPop列を保持したいとします。 id.varsを次のように設定して、これを実現します。

DTmu <- melt(DT, id.vars=c("rn", "UrbanPop" ), 
             variable.name='Crime', value.name = "Rate")
names(DTmu)[1] <- "State"

カテゴリ名(Murder、Assaultなど)を含む列の名前をvariable.nameで指定し、値を含む列をvalue.name指定していることに注意してください。私たちのデータはそうそうです。

             State UrbanPop  Crime Rate
  1:       Alabama       58 Murder 13.2
  2:        Alaska       48 Murder 10.0
  3:       Arizona       80 Murder  8.1
  4:      Arkansas       50 Murder  8.8
  5:    California       91 Murder  9.0

split-apply-combineスタイルのアプローチで要約を生成するのは簡単です。例えば、暴力犯罪を州ごとに要約するとします。

DTmu[, .(ViolentCrime = sum(Rate)), by=State]

これは与える:

        State ViolentCrime
1:    Alabama        270.4
2:     Alaska        317.5
3:    Arizona        333.1
4:   Arkansas        218.3
5: California        325.6
6:   Colorado        250.6

data.tableを使用した表形式データのピボットとアンピボット - II

ロングフォームからワイドフォームへの変換

前の例からデータを回復するには、 dcast同様に使用します。

DTc <- dcast(DTmu, State + UrbanPop ~ Crime)

これにより、元のワイドフォームのデータが得られます。

             State UrbanPop Murder Assault Rape
 1:        Alabama       58   13.2     236 21.2
 2:         Alaska       48   10.0     263 44.5
 3:        Arizona       80    8.1     294 31.0
 4:       Arkansas       50    8.8     190 19.5
 5:     California       91    9.0     276 40.6

ここでは、式記法を使用して、一意のレコード識別子(LHS)を構成する列と、新しい列名(RHS)のカテゴリラベルを含む列を指定します。どの列を数値に使用しますか?デフォルトでは、 dcastは最初の列を使用して、数式の指定時に残った数値を使用します。明示的にするには、パラメータvalue.varを列名と共に使用します。

操作によって各セルに値のリストが生成されると、 dcastfun.aggregateメソッドを使用して状況を処理します。犯罪率を調査する際に、私は都市部の人口が類似している州に興味があるとします。私は計算された情報を持つ列Decileを追加します。

DTmu[, Decile := cut(UrbanPop, quantile(UrbanPop, probs = seq(0, 1, by=0.1)))]
levels(DTmu$Decile) <- paste0(1:10, "D")

今、 Decile ~ Crimeをキャスティングすると、セルごとに複数の値が生成されます。 fun.aggregateを使って、これらの処理方法を判断できます。テキストと数値の両方をこのように扱うことができます。

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)

これは与える:

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=mean)

これは与える:

             State UrbanPop  Crime Rate Decile
  1:       Alabama       58 Murder 13.2     4D
  2:        Alaska       48 Murder 10.0     2D
  3:       Arizona       80 Murder  8.1     8D
  4:      Arkansas       50 Murder  8.8     2D
  5:    California       91 Murder  9.0    10D

都市人口の各10分の1には複数の州があります。 fun.aggregateを使用して、これらの処理方法を指定します。

dcast(DTmu, Decile ~ Crime, value.var="Rate", fun.aggregate=sum)

これは、同様の状態のデータを合計し、以下を与えます。

    Decile Murder Assault  Rape
 1:     1D   39.4     808  62.6
 2:     2D   35.3     815  94.3
 3:     3D   22.6     451  67.7
 4:     4D   54.9     898 106.0
 5:     5D   42.4     758 107.6 


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow