2

ややばかげたRの質問があります。次のようなマトリックス(またはデータフレームのどちらか操作しやすい方)がある場合:

Year  Match
2008   1808
2008 137088
2008      1
2008  56846
2007   2704
2007 169876
2007  75750
2006   2639
2006 193990
2006      2

そして、年間の各マッチ数を合計したかった (つまり、例えば 2008 年の行は で2008 195743、どうすればこれを行うことができるでしょうか? 頭の中にいくつかの解決策がありますが、それらはすべて不必要に複雑であり、R の傾向があります。はるかに簡単な解決策をどこかに隠しておく必要があります。

上記と同じ行列を次のように生成できます。

structure(c(2008L, 2008L, 2008L, 2008L, 2007L, 2007L, 2007L, 
2006L, 2006L, 2006L, 1808L, 137088L, 1L, 56846L, 2704L, 169876L, 
75750L, 2639L, 193990L, 2L), .Dim = c(10L, 2L), .Dimnames = list(
NULL, c("Year", "Match")))

ご協力いただきありがとうございます。

4

3 に答える 3

5

aggregate(x = df$Match, by = list(df$Year), FUN = sum)df、上記のデータフレームであると仮定します。

于 2012-04-18T03:48:58.547 に答える
3

「plyr」パッケージの「ddply」関数を使用することもできます。

# install plyr package
install.packages('plyr')
library(plyr)
# creating your data.frame
foo <- as.data.frame(structure(c(2008L, 2008L, 2008L, 2008L, 2007L, 2007L, 2007L, 
            2006L, 2006L, 2006L, 1808L, 137088L, 1L, 56846L, 2704L, 169876L, 
            75750L, 2639L, 193990L, 2L), .Dim = c(10L, 2L), .Dimnames = list(
              NULL, c("Year", "Match"))))

# here's what you're looking for
ddply(foo,.(Year),numcolwise(sum))

  Year  Match
1 2006 196631
2 2007 248330
3 2008 195743

ちなみに、2008 年の合計は 195743 (1808+137088+1+56846) である必要があり、56846 を追加するのを忘れていた 138897 ではありません。

于 2012-04-18T21:43:13.033 に答える