5

パッケージgather内の引数を理解しようとしています。tidyr

ドキュメントを見たところ、構文は次のようになります。

gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)

ヘルプ ファイルに があります。

stocks <- data.frame(
  time = as.Date('2009-01-01') + 0:9,
  X = rnorm(10, 0, 1),
  Y = rnorm(10, 0, 2),
  Z = rnorm(10, 0, 4)
)

gather(stocks, stock, price, -time)

私は最後の行に興味があります:
gather(stocks, stock, price, -time)

ここに、stocks明らかに変更したいデータがあります。これで問題ありません。

stockとはキーと値のペアの引数を読み取ることができますがprice、このキーと値のペアを作成するための列の選択方法は、この関数によってどのように決定されるのでしょうか。元のデータフレームは次のようになります。

time        X            Y          Z
2009-01-01  1.10177950  -1.1926213  -7.4149618
2009-01-02  0.75578151  -4.3705737  -0.3117843
2009-01-03  -0.23823356 -1.3497319  3.8742654
2009-01-04  0.98744470  -4.2381224  0.7397038
2009-01-05  0.74139013  -2.5303960  -5.5197743

XYまたはの任意の組み合わせを使用する必要があるという兆候は見られませんZ。この関数を使用しているときは、長い形式のデータフレームの列に付けたい名前を選択しているように感じ、それがgather魔法のように機能することを祈っています。そういえば、私も を使っているときと同じように感じますmelt

gather列のタイプを見ますか?ワイドからロングにどのようにマッピングされますか?

EDIT 以下の素晴らしい回答、以下の素晴らしい議論、および哲学とtidyrパッケージの使用に関する詳細情報が必要な人は、間違いなくこの論文を読む必要がありますが、ビネットでは構文は説明されていません。

4

1 に答える 1

11

「tidyr」ではgather...引数に測度変数を指定します。これは概念的に とは少し異なりmeltます。ここでは、多くの例 (SO に関する多くの回答でさえ) がid.vars引数の使用を示します (ID として指定されていないものはすべて測定値であるという前提で)。

あなたが示した例のように、引数は列名...を取ることもできます。-これは基本的に、「この列を除くすべての列を収集する」ことを意味します。の別の省略形のアプローチにgatherは、コロンを使用して列の範囲を指定することが含まれます (例: ) gather(stocks, stock, price, X:Z)

関数のコードを見てgather比較できます。melt最初の数行は次のとおりです。

> tidyr:::gather_.data.frame
function (data, key_col, value_col, gather_cols, na.rm = FALSE, 
    convert = FALSE) 
{
    data2 <- reshape2::melt(data, measure.vars = gather_cols, 
        variable.name = key_col, value.name = value_col, na.rm = na.rm)
于 2015-01-25T06:07:20.747 に答える