0

具体的には、

次のセットアップを使用しました。

newdata <- tapply(mydata(#), list(mydata(X), mydata(Y)), sum)

現在、次のようにリストされているテーブルがあります。

X= 州、Y= 州内の郡、#= 何かの数値の合計

  • __ Y1 Y2 Y3 Yn
  • X1 ## ## ## ##
  • X2 ## ## ## ##
  • X3 ## ## ## ##
  • Xn ## ## ## ##

必要なのは、次のようにリストされたテーブルです。

  • X1 Y1 ##
  • X1 Y2 ##
  • X1 Y3 ##
  • X1 Yn ##
  • X2 Y1 ##
  • X2 Y2 ##
  • X2 Y3 ##
  • X2 Yn ##
  • Xn Y1 ##
  • Xn Y2 ##
  • Xn Y3 ##
  • Xn Yn ##
4

2 に答える 2

4
library(reshape2)
new_data <- melt(old_data, id.vars=1)

?melt構文の詳細については、調べてください。

例:

> df <- data.frame(x=1:5, y1=rnorm(5), y2=rnorm(5))
> df
  x         y1         y2
1 1 -1.3417817 -1.1777317
2 2 -0.4014688  1.4653270
3 3  0.4050132  1.5547598
4 4  0.1622901 -1.2976084
5 5 -0.7207541 -0.1203277
> melt(df, id.vars=1)
   x variable      value
1  1       y1 -1.3417817
2  2       y1 -0.4014688
3  3       y1  0.4050132
4  4       y1  0.1622901
5  5       y1 -0.7207541
6  1       y2 -1.1777317
7  2       y2  1.4653270
8  3       y2  1.5547598
9  4       y2 -1.2976084
10 5       y2 -0.1203277
于 2012-06-06T23:00:47.567 に答える
1

いくつかのサンプルデータ

mydata <- data.frame(num=rnorm(40),
                     gp1=rep(LETTERS[1:2],2),
                     gp2=rep(letters[1:2],each=2))

それに適用tapplyする:

tmp <- tapply(mydata$num, list(mydata$gp1, mydata$gp2), sum)

の結果tapplyは行列ですが、これを表のように扱い、 を使用as.data.frame.tableして変換できます。これは、追加のパッケージに依存しません。

as.data.frame.table(tmp)

2 つの異なるデータ構造は次のようになります。

> tmp
         a         b
A 8.381483  6.373657
B 2.379303 -1.189488
> as.data.frame.table(tmp)
  Var1 Var2      Freq
1    A    a  8.381483
2    B    a  2.379303
3    A    b  6.373657
4    B    b -1.189488
于 2012-06-07T00:23:52.590 に答える