5

ここに初投稿!ddply 関数の使用に問題があります。「LC」列を使用して要約し、「面積」列に値を追加したいこの表があります。

  ID LC  per     Area
1  1  7 0.29  62428.3
2  1  7 0.79 170063.3
3  1  4 0.40  86108.0
4  1  7 0.43  92566.1
5  1  6 1.00 215270.0
6  1  7 0.61 131314.7

このデータフレームに基づいて、私はまさにこれを期待します:

LC   Area
4  86108.0
6 215270.0
7 456372.4

ddply 関数を適用すると、次の結果が得られます。

> ddply(x, 'LC', sum)
  LC       V1
1  4  86113.4
2  6 215278.0
3  7 456406.5

フォーマットは完璧ですが、値にいくつかの不一致があります。たとえば、クラス 7 の値は 456372.4 である必要がありますが、ddply は 456406.5 の値を報告します。34.1の差。すべての値が誤って計算されています。

なぜ私がこの問題を抱えているのか、誰か説明してもらえますか? ここで何か不足していますか?私のコードは間違っていますか?

ありがとうございました!

4

1 に答える 1

5

あなたのアプローチには2つの問題があります:

  • ddply を合計するかを指定する必要があります( Area)。列を指定しない場合は、すべての列 ( 、、および)ddplyの値を合計します。IDperArea
  • summarise引数を使用してデータを集計できます。

このコードは機能します:

x <- read.table(text="  ID LC  per     Area
1  1  7 0.29  62428.3
2  1  7 0.79 170063.3
3  1  4 0.40  86108.0
4  1  7 0.43  92566.1
5  1  6 1.00 215270.0
6  1  7 0.61 131314.7", header = TRUE)


library(plyr)

ddply(x, .(LC), summarise, sum(Area))

結果:

  LC      ..1
1  4  86108.0
2  6 215270.0
3  7 456372.4
于 2012-12-12T06:56:03.757 に答える