行と列を指定してデータにアクセス
↓前回の記事はこちらです。
前回は一年間のCSVファイルをR言語で読み込みました。今回はその読み込んだデータを使って計算したいと思います。
読み込んだデータは行列の形で読み込まれています。data変数を全部表示させるとデータ数が多くなり見づらくなるので、最初だけ表示させたいと思います。 変数の最初だけ抜き取るにはhead()を使います。
head(data)
と入力してエンターでdata変数の最初だけ表示されます。下のように表示されると思います。
年月日 平均気温… 最高気温… 最低気温…
1 2017/1/1 7.4 13.8 2.0
2 2017/1/2 7.2 13.3 3.8
3 2017/1/3 8.0 13.7 3.5
4 2017/1/4 8.5 14.0 3.6
5 2017/1/5 6.7 10.4 3.7
6 2017/1/6 4.5 8.8 1.5
このようにdata変数の中には一年分のデータが格納されています。計算するときはこれらのデータ全てにアクセスするより、一部を指定して計算することが多いと思います。
一部を指定したい場合は
変数名[行数、列数]
という入力で指定できます。試しにやってみたいと思います。1月3日の平均気温を見たいとしたら、まず変数名はここではdataです。次に[]の中で抜き取りたい部分を指定します。先ほどのhead()で表示したデータで確認すると1月3日の行数は1日、2日と続き上から3番目で、平均気温の列数は左から2番目です。
data[3,2]
と入力してエンター押してみます。
8
と表示されると思います。もう一度head()で表示させたデータを見て確認してみると、1月3日の平均気温は8になっていると思います。
列数だけを指定して丸ごと抜き取る
一年間で最も高かった気温を求める
せっかく綺麗にまとまっているデータなので、一度にたくさんのデータを抜き取って計算したいことも多いと思います。一年間で最も高かった気温を求めたいと思います。つまり2017年の最高気温です。
一年間の最高気温は当然最高気温の列の中にあります。なので使うのは左から3列目の最高気温の列だけです。一年間の最高気温ということは、最高気温の列の中で一番高い値を知りたいわけです。今回の場合、指定の仕方はとても簡単です。
列を丸ごと抜き取りたい時は、行は指定せず列数だけ指定すれば丸ごと抜き取れます。
今回だと3列目が必要なためdata[,3]と指定すれば3列目を丸ごと参照できます。参照しただけでは最高気温はわからないのでその中の一番大きな値を探します。数値の集まりの中から一番大きな値はmax()を使えば探し出す事が出来ます。
max(data[,3])
と入力してエンターを押します。
37.1
と表示されると思います。これが今回扱ったデータの東京2017年で最も高かった気温です。
列の一部を抜き取る
上半期と下半期の平均気温を比べてみる
今度は列の一部を抜き取りたいと思います。上半期と下半期の平均気温を比べてみます。(平均にもいろいろ考え方がありますが、今回は一日の平均気温の平均をとり、平均とします。)一年間は365日なので、読み込んだdata変数にも365日分、365行のデータが格納されています。ここでは1~182日(行)までが上半期、183~365日(行)までが下半期とします。
先ほどは何も指定せず丸ごと参照しましたが、今度のように「〇~〇まで」という時は:を使って、1:182と指定します。
上半期の平均気温は左から2列目の平均気温の列の1~182行目までの平均とします。平均を求めるにはmean()を使います。
mean(data[1:182,2])
と入力してエンターを押します。
13.08571
と表示されました。これが上半期の平均気温です。
同じ要領で下半期の平均気温を求めます。下半期は183~365日目までとします。
mean(data[183:365,2])
と入力してエンターを押します。
18.65137
と表示されました。これが下半期の平均気温です。
東京では下半期の方が平均すると5℃くらい高いという結果です。今回の計算では上半期に真冬の1月、2月、3月が入り、下半期に7月、8月、9月が入っているので、下半期の方が平均気温が高いのは当然と言えば当然な結果です(笑)
季節ごとに最高気温と最低気温の差の平均を求める
今度はもう少しだけ複雑な計算をしてみます。約3か月ごとに分けて寒暖差の平均を求めて、季節で寒暖差が違うのかみてみようと思います。
まず最高気温-最低気温で一日ごとの寒暖差一年間分のデータを変数kandansaに格納します。
kandansa<-data[,3]-data[,4]
data[,3]は最高気温の列です。data[,4]は最低気温の列です。
kandansaの中身は
data[1,3]-data[1,4]
data[2,3]-data[2,4]
data[3,3]-data[3,4]・・・・・・・
data[365,3]-data[365,4]
となっています。これで一年分の寒暖差が求められました。
あとはこれを約三か月ごとに分けて平均を求めます。365日あるので91、91、91、92で分けて計算しようと思います。そうすると大体1、2、3月と4、5、6月と7、8、9月と10、11、12月に分かれると思います。
mean(kandansa[1:91])
9.207692
mean(kandansa[92:182])
8.876923
mean(kandansa[183:273])
7.382418
mean(kandansa[274:365])
7.671739
という結果になりました。mean()でそれぞれの日付のkandansaの平均を求めています。この結果だと何とも言えないですね(笑)ここではやりませんが、他の年も調べてもし同じような結果になれば、冬、春が寒暖差が大きく、それに比べると夏、秋は寒暖差が小さいと言えると思います。興味がある人はいろいろ計算してみると面白いと思います。
説明しやすいようにkandansa変数を作りましたが、変数を作らず下のように計算しても同じ値を求める事が出来ます。
mean(data[1:91,3]-data[1:91,4])
9.207692
mean(data[92:182,3]-data[92:182,4])
8.876923
mean(data[183:273,3]-data[183:273,4])
7.382418
mean(data[274:365,3]-data[274:365,4])
7.671739