13
> library(data.table)
> A <- data.table(x = c(1,1,2,2), y = c(1,2,1,2), v = c(0.1,0.2,0.3,0.4))
> A
   x y   v
1: 1 1 0.1
2: 1 2 0.2
3: 2 1 0.3
4: 2 2 0.4
> B <- dcast(A, x~y)
Using v as value column: use value.var to override.
> B
  x   1   2
1 1 0.1 0.2
2 2 0.3 0.4

パッケージ reshape2 の fx dcast を使用して、data.table を long から wide に変更できるようです。しかし、data.table には、'by' や 'group' などのパラメータを提供するオーバーロードされたブラケット演算子が付属しています。

マニュアルからのランダムな例:

DT[,lapply(.SD,sum),by=x]

それはすばらしく見えます - しかし、私はまだ使い方を完全には理解していません.

私はこれの方法も例も見つけられなかったので、おそらくそれは不可能であるかもしれません. .

4

3 に答える 3

13

dcast()次のように (現在はバージョン 1.9.5 以降のデフォルトのdata.table方法。以前のバージョンでは を使用dcast.data.table) を使用します。

> dcast(A,x~y)
Using 'v' as value column. Use 'value.var' to override
   x   1   2   3
1: 1 0.2 0.4 0.6
2: 2 0.8 1.0  NA

これは高速であり、setnames().

yまた、上記の例で文字レベル (「低」、「中」、「高」など) を持つ因子変数である場合にも特に役立ちCJ()ますsetnames()。データに不適切なラベルが付けられる可能性があります。

于 2014-04-25T22:28:24.087 に答える
2

(アルンのクレジット付き)

A[, setattr(as.list(v), 'names', y), by=x]
于 2013-08-04T21:46:09.927 に答える