7

Rには、Location、sample_year、およびcountのテーブルがあります。それで、

Location sample_year count  
A        1995        1
A        1995        1  
A        2000        3  
B        2000        1  
B        2000        1  
B        2000        5

'Location'列と'sample_year'列の両方を調べ、単一の列ではなく、この一意の組み合わせに応じて'count'を合計する要約テーブルが必要です。したがって、最終結果は次のようになります。

Location sample_year sum_count
A        1995        2
A        2000        3
B        2000        7

列とデータを新しい列にマージして、一意のLocation-sample_yearを作成することもできますが、これはクリーンなソリューションではありません。特に、ある時点で3列にスケールアップする必要がある場合はそうです。より良いアプローチが必要です。

4

3 に答える 3

11

aggregate数式で使用できます。

最初のデータ:

x <- read.table(textConnection("Location sample_year count  
A        1995        1
A        1995        1  
A        2000        3  
B        2000        1  
B        2000        1  
B        2000        5"), header = TRUE)

グループ化を指定する数式で sum を使用して集計します。

aggregate(count ~ Location+sample_year, data = x, sum)
    Location sample_year count
1        A        1995     2
2        A        2000     3
3        B        2000     7
于 2011-03-07T05:24:54.677 に答える
4

またはreshapeパッケージ付き:

library(reshape)
md <- melt(x, measure.vars = "count")
cast(md, Location + sample_year ~ variable, sum)
  Location sample_year count
1        A        1995     2
2        A        2000     3
3        B        2000     7

編集:

x@mdsumnerの回答のオブジェクトを使用しました。とにかく...外部パッケージに依存しないため、彼の答えに固執することをお勧めします(パッケージaggregateをデタッチしない限り、機能はRにバンドルされていstatsます...)。そして、ところで、それはreshapeソリューションよりも高速です。

于 2011-03-07T05:36:35.377 に答える