データフレームを使って集計を行う場合に、使いやすい関数があります。aggregate
関数です。データフレームの計算にはapply
系の関数がよく使われますが、わかりづらいという方にはオススメの方法です。
関連記事
R 使い方 欠損値 NA データフレームのNAを探す方法
R 使い方 欠損値 NA 除去方法
R 関数 maxの位置・minの位置を求める
R 使い方 データフレーム 累積和を求める
aggregate関数の使い方
aggregate関数は、データフレームについて「指定した列をカテゴリで分けて集計する」というような計算を行うことができます。引数に、集計したい列(群)・識別したい条件(群)・関数を指定します。
単純構造
構造が単純な場合は、table
関数でも同様のことができます。
R> df <- data.frame(name = c("a","a","b","b","b","c","c","c","c")) name 1 a 2 a 3 b 4 b 5 b 6 c 7 c 8 c 9 c R> table(df) df a b c 2 3 4 R> aggregate(df, by=list(df$name), length) Group.1 name 1 a 2 2 b 3 3 c 4
カテゴリ毎に集計する
データフレームの列が多い場合はaggregate
関数を使ったほうが便利です。集計したい列(x)、カテゴリなどの分けたい条件(by)、計算に使いたい関数(FUN)を指定します。
R> df <- data.frame(name = c("a","a","b","b","b","c","c","c","c"), val1 = c(0, 1, 1, 2, 3, 5, 8, 13, 21), val2 = c(1, 2, 3, 4, 5, 6, 7, 8, 9)) R> df name val1 val2 1 a 0 1 2 a 1 2 3 b 1 3 4 b 2 4 5 b 3 5 6 c 5 6 7 c 8 7 8 c 13 8 9 c 21 9 R> aggregate(x=df[c("val1")], by=list(df$name), FUN=sum) # val1のみ集計 Group.1 val1 1 a 1 2 b 6 3 c 47 R> aggregate(x=df[c("val1","val2")], by=list(df$name), sum) # val1,2について Group.1 val1 val2 1 a 1 3 2 b 6 12 3 c 47 30
便利な使い方
集計したい列や、分けたい条件は複数指定することができます。
R> df <- data.frame(name = c("a","a","b","b","b","c","c","c","c"), type = c("A","A","A","A","B","B","B","B","B"), val1 = c(0, 1, 1, 2, 3, 5, 8, 13, 21), val2 = c(1, 2, 3, 4, 5, 6, 7, 8, 9)) R> df name type val1 val2 1 a A 0 1 2 a A 1 2 3 b A 1 3 4 b A 2 4 5 b B 3 5 6 c B 5 6 7 c B 8 7 8 c B 13 8 9 c B 21 9 R> aggregate(x=df[c("val1","val2")], by=list(df$name,df$type), sum) # 複数条件 Group.1 Group.2 val1 val2 1 a A 1 3 2 b A 3 7 3 b B 3 5 4 c B 47 30 # データセット irisでSpecies毎にmaxを計算 R> iris Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa ... R> aggregate(x=iris[-5], by=list(species=iris$Species), FUN=max) species Sepal.Length Sepal.Width Petal.Length Petal.Width 1 setosa 5.8 4.4 1.9 0.6 2 versicolor 7.0 3.4 5.1 1.8 3 virginica 7.9 3.8 6.9 2.5
よく使われるapply系関数
apply系関数を指定して集計した場合
apply
関数とtapply
関数を組み合わせて、同様の集計を行ってみました。
R> apply(iris[-5], 2, function(x){tapply(x, iris$Species, max)}) Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 5.8 4.4 1.9 0.6 versicolor 7.0 3.4 5.1 1.8 virginica 7.9 3.8 6.9 2.5
関連記事
R 使い方 エラーバー グラフの描き方(tapply使用例)
R 使い方 ボックスプロット(box plot) グラフの描き方(tapply使用例)
論文・データ解析の支援
個別に直接相談できるのが良いと、たくさんの方にご利用頂いています。
関連記事1
R plotのPDFやPNGへの保存 - PDFなら複数の画像保存も可能
Rのplot (グラフ) は、PDFやPNGファイルとして保存することができます。操作は、通常のグラフの描画と同じです。違うところは、前もって保存先のデバイスをオープンし、描画終了後に明示的にクローズするだけです。PDFなら1つのファイルに...
R 使い方 組込みデータセット iris データフレーム・ベクトル・リスト
Rのデータ型について学びます。使うデータは、組込みデータセットの「iris」です。irisの構造を眺めたり要約統計量を求めることで、データフレーム・ベクトル型・リスト型について簡単に学びます。とにかく早く問題解決したい人はこちら>>直接、デ...
ratio 1.5倍は、logFCで何?
bioinfomatics では、ratio や logFC を変動の閾値としてよく使います。ratio 2倍・4倍なら、対数表現も1・2と簡単にわかりますが、1.5倍などを閾値とした場合は、対数で何になるか覚えておくのは大変です。これらは...
R 知っていると便利!パッケージ読込みとヘルプ
Rのインストール済みのパッケージについて調べます。スクリプトがちゃんと動かないとき、「何がインストールされているか?」また、「何がインストールされていないか?」がヒントになるときがあります。とにかく早く問題解決したい人はこちら>>直接、デー...
R 関数 maxの位置・minの位置を求める
Rで、最大値や最小値を求めるのは簡単ですが、「最大値・最小値の位置は?」という問題を考えてみたいと思います。とにかく早く問題解決したい人はこちら>>直接、データ解析相談最大値・最小値を求める最大値・最小値を求めるのは簡単です。最大値を求める...
R 使い方 データフレーム 累積和を求める
データフレームやmatrixで累積和を求める機会ありませんか?「前の行の値」に「現在の行の値」を繰り返し足していくことで求められますが、せっかく「R」を使っているのに、for文やインデックスを使って求めるのも残念な感じがします。そんなときは...
R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します。条件指定の主なパラメータは、「subset」と「select」です。「subset」では行を抽出するための条件式、「select」では列を抽...
関連記事2
R 4.0 インストール ubuntu
Rのインストール手順について。最近よくつかう「tidyverse」も一緒にインストールします。とにかく早く問題解決したい人はこちら>>直接、データ解析相談R 4.0 インストール手順事前設定$ sudo apt update -qq$ su...
R 使い方 debug(デバッグ)方法 スクリプトの書き方
スクリプトが思ったように動かない、そんなときはバグ(プログラムの間違い)があると言われます。スクリプトを書く場合、そのような間違いを書かないように注意することは当然ですが、完全に防ぐのは難しいことです。スクリプトが思うように動かない場合は、...
R 使い方 文字列処理(文字列検索・文字列置換)
統計ソフトRは、統計処理やグラフの描画でよく用いられます。しかし、色々なことに活用していると、「文字列処理ができると便利だな」と思うことがあります。統計ソフトRには、文字列処理のための便利な関数が準備されているので、代表的な関数についてまと...
R 使い方 while 繰り返し スクリプトの書き方
Rで「条件を満たす間ずっと繰り返し」を行う場合は、whileを使います。とにかく早く問題解決したい人はこちら>>直接、データ解析相談while スクリプトの書き方while文は、条件式と一緒に書きます。条件を満たす間、一連の文やブロックをず...
R 使い方 for 繰り返し スクリプトの書き方
Rで単純な繰り返し制御を行う場合は、forを使います。とにかく早く問題解決したい人はこちら>>直接、データ解析相談for スクリプトの書き方forは繰り返し制御の基本的な構造です。集合には、ベクターやデータフレームなどを使うことができます。...
R switch 使い方 スクリプトの書き方
R の switch文は、「複数の条件」とそれに「対応した処理」をまとめて記述できるので、if文よりも簡潔にかけます。R の switchの条件は、文字列で書かれたラベルで判断します。R の switch文の「書き方」と使い方を、サンプルを...
R 使い方 if 条件分岐 スクリプトの書き方
R の if文は、フロー制御で最も単純な条件分岐です。条件に「一致したかどうか」という判断で、次に実行するコマンドを変更したりするときに使います。Rのif文の「書き方」、ANDやORを使った複数条件の指定の仕方などを、サンプルを交えてまとめ...
R 使い方 関数 スクリプトの書き方
Rの使い方として、プログラムの基本構成となる関数の作り方について。とにかく早く問題解決したい人はこちら>>直接、データ解析相談R 使い方 関数を利用したプログラムメッセージの表示や、メッセージの長さを取得する関数を作成します。関数は、「関数...
R 使い方 Hello World スクリプトの書き方
Rでプログラムを書きます。今回は、プログラムの基本「Hello World!」です。とにかく早く問題解決したい人はこちら>>直接、データ解析相談Hello World プログラムHello Worldプログラムは、プログラムの勉強を開始する...
R 使い方 行列(マトリックス) スクリプトの書き方
Rのマトリックスは、他のプログラミング言語と同様、数値や文字などの1種類のデータを2次元配列として保持するデータ構造です。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。マトリックスの使い方について。とにかく早く問題解決した...
R 使い方 リスト スクリプトの書き方
Rのリストは、他のプログラミング言語と同様、各項目にたいして名前をつけたベクトルです。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。リストの使い方について。とにかく早く問題解決したい人はこちら>>直接、データ解析相談関連記...
R 使い方 ベクトル スクリプトの書き方
Rのベクトルは、他のプログラミング言語と同様、数値や文字などの1種類のデータを順番に保持するデータ構造です。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。Rのベクトルの使い方について。とにかく早く問題解決したい人はこちら>...
R 使い方 データフレーム・ファクター スクリプトの書き方
Rのデータフレーム・ファクターは、他のプログラミング言語のデータ構造とは異なる独特な構造。でも、とてもよく使う構造で、必ず使いこなせるようになりましょう。基本的な構造を理解すれば、Rはもっと使いやすいツールになります。Rのデータフレームとフ...
R 使い方 データ構造まとめ スクリプトの書き方
Rで使うデータ構造をまとめてみます。一気に眺めることで、それぞれの特徴を理解できるかもしれません。とにかく早く問題解決したい人はこちら>>直接、データ解析相談Rのデータ構造ベクトルベクトルは、最も基本的な構造をしています。数値や文字などの1...
R 使い方 データ 読込み テキスト,csv,エクセル,データベース スクリプトの書き方
「統計ソフト R」にデータを読み込むのは簡単です。タブ区切りのデータやエクセル・DBなどからデータを取り込むことができます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談Rにデータを読み込む「統計ソフト R」にデータを読み込む...