1

R で reshape を使用して、data.frame の列の集計統計を計算しています。これが私のdata.frameです:

> df
  a a b b ID
1 1 1 1 1  1
2 2 3 2 3  2
3 3 5 3 5  3

これは、reshape パッケージを理解するためのちょっとしたテスト data.frame です。as と s の平均を見つけるために、溶かしてからキャストしますb

> melt(df, id = "ID") -> df.m
> cast(df.m, ID ~ variable, fun = mean)
  ID a b
1  1 1 1
2  2 2 2
3  3 3 3

ああ!何?の平均c(2,3)が 2.5 などであることを望んでいました。どうしたの?ここに事があります:

> df.m
   ID variable value
1   1        a     1
2   2        a     2
3   3        a     3
4   1        a     1
5   2        a     2
6   3        a     3
7   1        b     1
8   2        b     2
9   3        b     3
10  1        b     1
11  2        b     2
12  3        b     3

どうしたの?私の両方はどこに行った5のですか?ここで非常に基本的な誤解がありますか? もしそうなら:それは何ですか?

4

2 に答える 2

2

列に一意の名前がないため、これは有効なデータ フレームではありません。

于 2010-07-29T00:23:21.400 に答える
1

これを修正するために、ここで回答を更新しました: R: data.frame の集計列

どうやら、データ フレームに一意の列名がない場合、それらは適切に溶解されません。

編集: の列名を使用する代わりに、適切に機能させるa a a b bために一意の列名を使用する必要があるようです。melt()最低限a.1 a.2 a.3 b.1 b.2、または何か。を使用した後melt()、 の適切なレベルを取得するオプションは、 のレベルでvariableを使用して明確な値を排除するか、 を使用して 2 つの新しい列を作成するかのいずれかです。先ほど付けたダミーの名前は次のようになります。gsub()variablecolsplit()

levels(df.m$variable) <- gsub("\\..*", "", levels(df.m$variable))
#or
df.m <- cbind(df.m, colsplit(df.m$variable, split = "\\.", names = c("Measure","N")))
于 2010-07-28T20:05:53.547 に答える