#データに慣れていない初心者学生のまとめ
こんにちは。データの集計など慣れていない初心者学生です。
まだまだデータに触れだしたばっかりでどうやってプログラムを書いていけばいいかわからないですが、解決できたものについてあげていこうかと思います。
(すみません、使用環境を書くの忘れました・・・。)
#新しい列を追加するには
新しい列を作るには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
#同じ列でデータ集計する
ここまでで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を使うなら知っておきたいチートシート群