1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

同じ列のデータの集計方法

Last updated at Posted at 2019-08-01

#データに慣れていない初心者学生のまとめ
こんにちは。データの集計など慣れていない初心者学生です。
まだまだデータに触れだしたばっかりでどうやってプログラムを書いていけばいいかわからないですが、解決できたものについてあげていこうかと思います。
(すみません、使用環境を書くの忘れました・・・。)

#新しい列を追加するには
新しい列を作るにはdplyrのmutate関数を使うと便利です!

#データ作成
library(dplyr)
df<-data.frame(sex=c("女","男","男","女"),
               height=c(162,180,175,155),
               weight=c(60,80,70,50))
 #mutate関数でbmiを計算
library(dplyr)
df<-mutate(df,bmi=weight/(height/100)^2)

このように**mutate(data,作成する列名=式)**で新しい列を追加することができます!

(df<-mutate(df,bmi=weight/(height/100)^2))
  sex height weight      bmi
1  女    162     60 22.86237
2  男    180     80 24.69136
3  男    175     70 22.85714
4  女    155     50 20.81165

補足:上記のように()をつけることで実行結果を表示してくれます!

#データフレームの列ごとの計算
apply関数を使うことでデータフレームの列ごとで計算を行うことができます。
以下のように**apply(データフレーム,(列の場合)2,式)**で計算を行うことができます。今回は身長、体重、bmiを計算しました!
補足:行ごとで計算を行いたいときは、**apply(データフレーム,(行の場合)1,式)**で計算できます。また、apply関数はデータフレームが数値または論理値である必要があるので、df[,-1](sexの列を除外)としました。

apply(df[,-1],2,mean)
   height    weight       bmi 
168.00000  65.00000  22.80563 

参考:apply系関数の使い方
補足:ncol()で列数を数えることができます。

#1つデータをずらすには
lag関数は一つ後ろにずらし、lead関数はlag関数とは逆に一つ前にずらすことができます。

dplyr::lag(df$height)
[1]  NA 162 180 175
dplyr::lead(df$height)
[1] 180 175 155  NA

参考:dplyrを使いこなす!Window関数編

#同じ列でデータ集計する
ここまででmutate関数やlag関数を扱いました。これらを使って一つずれているデータと集計を行いたいと思います。(時系列データでお世話になりました。)

year shop sales
2018 平塚店 5820
2018 藤沢店 6570
2018 茅ヶ崎店 6205
2017 平塚店 5600
2017 藤沢店 6500
2017 茅ヶ崎店 6520
2016 平塚店 5800
...

上記のようなデータ(1年ごとの店舗の売り上げ)を想定します。
以前、データ関連のコンテストに参加する際、このようなデータ構造ものがよく見られました。しかし、まだまだ初心者の私はこの構造のデータをどう処理したらいいかわかりませんでしたが、lag関数使ってみると便利ですね!

まずはデータを作成します。

# データ作成
df<-data.frame(year=c(2018,2018,2018,2017,2017,2017,2016,2016,2016),
               shop=c("平塚店","藤沢店","茅ヶ崎店","平塚店","藤沢店","茅ヶ崎店","平塚店","藤沢店","茅ヶ崎店"),
               sales=c(5820,6570,6205,5600,6500,6520,5800,6230,6725))
> df
  year     shop sales
1 2018   平塚店  5820
2 2018   藤沢店  6570
3 2018 茅ヶ崎店  6205
4 2017   平塚店  5600
5 2017   藤沢店  6500
6 2017 茅ヶ崎店  6520
7 2016   平塚店  5800
8 2016   藤沢店  6230
9 2016 茅ヶ崎店  6725

今回は前年比を計算したいと思います!

> df%>%
+   group_by(shop)%>%
+   arrange(year)%>%
+   mutate(前年比=sales/lag(sales))
# A tibble: 9 x 4
# Groups:   shop [3]
   year shop     sales 前年比
  <dbl> <fct>    <dbl>  <dbl>
1  2016 平塚店    5800 NA    
2  2016 藤沢店    6230 NA    
3  2016 茅ヶ崎店  6725 NA    
4  2017 平塚店    5600  0.966
5  2017 藤沢店    6500  1.04 
6  2017 茅ヶ崎店  6520  0.970
7  2018 平塚店    5820  1.04 
8  2018 藤沢店    6570  1.01 
9  2018 茅ヶ崎店  6205  0.952

このように行がずれている年の売上(sales)を使い、(mutae関数と並び替えのarrange関数とlag関数で)前年比を計算することができました!
参考:https://ja.stackoverflow.com/questions/57031/%e5%89%8d%e5%b9%b4%e6%af%94%e3%81%be%e3%81%9f%e3%81%af%e5%a2%97%e6%b8%9b%e7%8e%87%e3%82%92%e6%b1%82%e3%82%81%e3%82%8b%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e6%95%99%e3%81%88%e3%81%a6%e3%81%8f%e3%81%a0%e3%81%95%e3%81%84

#その他便利なサイト

初心者にとってはありがたいサイトでいつもお世話になっています!日本語訳のチートシートもあり、とても便利です!
Rを使うなら知っておきたいチートシート群

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?