LoginSignup
4
5

More than 5 years have passed since last update.

【R言語】ベクトル事始

Posted at

はじめに

以前にもRの記事を投稿したことがあり、またこうして投稿させていただきます。
個人的な都合で超久々にRを触ったのですが、あれですね、筆者の脳が新品同様の輝きを取り戻したようでして、こりゃいかんと思って勉強し直している次第。

R言語にはベクトルと呼ばれる複数の要素が格納できるオブジェクトがありまして、Rを勉強する上では避けて通ることができない概念があります。
今回はRにおけるベクトルの基本的な使い方を紹介します。

サンプルソースではパイプRと呼ばれるパイプライン演算子(%>>%)をよく使いますが、これが何なのか噛み砕いて説明しますと、ある式の結果を別の式に1つ目の引数として渡す演算子のことを指していまして、これを使うことによりソースコードが見やすくなります。ってWikiに書いてありました。
Wiki先生はすごいですね。幸せになれる以外の方法なら何でも知ってる。
まぁJavaをよく使われる方ならラムダみたいなもの、と思っていただけると理解が捗るかと思います。

あ、それからベクトルの計算をするあたりで不偏分散とか標準偏差などのキーワードが出てきます。
それって何だったっけという方につきましては以前に記事を書かせていただきましたので、そちらをご参照ください。

参考:【初学者向け】Rではじめる統計学 分散と標準偏差
【初学者向け】Rではじめる統計学 共分散と相関係数

長くなりましたが紹介に入りたいと思います。

ベクトルの作成

ベクトルの作成の方法についてです。
基本的にはc(a,b,c,d,...)のような感じで作成することもできますが、
より効率的に作成する代表的な例として以下が挙げられます。

コマンド 説明
x:y xからyまでのベクトルを作成する
seq(x,y,length=z) xからyまでをz等分する等差ベクトルを作成する
seq(x,y,by=z) xからyまでzずつ増加するベクトルを作成する
rep(x:y,times=z) xからyまでのベクトルをz回反復生成する
rep(x:y:length=z) xからyまでのベクトルを長さがzになるまで反復生成する
サンプルソース.R
# サンプルソースを実行する場合ははじめに実行してください
install.packages("pipeR")
library(pipeR)

# ベクトルの作成-------------

#ベクトルを作成する
x <- c(0,1,2,3,4,5) %>>%
  print()

x <- c(0:5) %>>%
  print()

#1から100までを5等分する等差ベクトルを作成する
x <- seq(1,100,length = 5) %>>%
  print()

#1から100まで5ずつ増加するベクトルを作成する
x <- seq(1,100,by = 5) %>>%
  print()

#1から10までのベクトルを2回反復生成する
x <- rep(1:10,times = 2) %>>%
  print()

#1から10までのベクトルを長さ30になるまで反復生成する
x <- rep(1:10,length = 30) %>>%
  print()

ベクトルの計算

続いて、ベクトルの計算の仕方について代表的な例を以下に紹介させていただきます。

関数 説明
sum() 総和
mean() 平均
var() 不偏分散
median() 中央値
cor(x,y) 相関係数
max() 最大値
min() 最小値
prod() 総積
cumsum() 累積和
sd() 標準偏差
sort() 昇順ソート
rev() 降順ソート
pmin(x,y,z,...) 並列最小値
pmax(x,y,z,...) 並列最大値
match(x,n) マッチング
rank() ソートした時の各要素の順位
order() ソートした時の各要素の元の位置
サンプルソース.R
(中略)
# ベクトルの計算-------------

#総和
x <- c(1:5) %>>%
  sum() %>>%
  print()

#平均
x <- c(1:5) %>>%
  mean() %>>%
  print()

#不偏分散
x <- c(1:5) %>>%
  var() %>>%
  print()

#中央値
x <- c(1:5) %>>%
  median() %>>%
  print()

#相関係数
x <- c(21,43,55,78,9)
y <- c(99,33,22,44,5)
cor(x,y) 

#最大値
x <- c(1:5) %>>%
  max() %>>%
  print()

#最小値
x <- c(1:5) %>>%
  min() %>>%
  print()

#総積
x <- c(1:5) %>>%
  prod() %>>%
  print()

#累積和
x <- c(1:5) %>>%
  cumsum() %>>%
  print()

#標準偏差
x <- c(1:5) %>>%
  sd() %>>%
  print()

#昇順ソート
x <- c(1:5)  %>>%
  sort() %>>%
  print()

#降順ソート
x <- c(1:5) %>>%
  rev() %>>%
  print()

#並列最小値
x <- c(1:5)
y <- c(6:10)
z <- c(11:15)
pmin(x,y,z)

#並列最大値
pmax(x,y,z)

#範囲
x <- c(1:5) %>>%
  range() %>>%
  print()

#マッチング
x <- c(1:5) %>>%
  match(2) %>>%
  print()

#ソートした時の各要素の順位
x <- c(1:5) %>>%
  rank() %>>%
  print()

#ソートした時の各要素の元の位置
x <- c(1:5) %>>%
  order() %>>%
  print()

また、ベクトルを集合と見立てて集合演算も行えます。
以下に例を紹介します。

関数 説明
union(x,y) 和集合(xとyの片方または両方に現れる要素を抽出)
intersect(x,y) 積集合(xとy両方に現れる要素を抽出)
setdiff(x,y) (xに現れるがyに現れない要素を抽出)
setequal(x,y) 集合として等しいか(要素が一致しないとFALSE、一致でTRUEを返す)
is.element(x,y) xの各要素がベクトルyに含まれるか(含まれる要素はTRUE,含まれない要素はFALSEを返す)
サンプルソース.R
(中略)
#和集合(xとyの片方または両方に現れる要素を抽出)
union(x,y)

#積集合(xとy両方に現れる要素を抽出)
intersect(x,y)

#差集合(yに現れるがxに現れない要素を抽出)
setdiff(y,x)

#集合として等しいか(要素が一致しないとFALSE、一致でTRUEを返す)
setequal(x,y)

#xの各要素がベクトルyに含まれるか(含まれる要素はTRUE,含まれない要素はFALSEを返す)
is.element(x,y)

ベクトルの要素へのアクセス

ベクトルの各要素へアクセスするには、以下のような方法があります。

コマンド 説明
x[n] n番目の要素を抽出
x[n] <- l n番目の要素をlに変更
x[正整数のベクトル] 複数の要素をまとめて抽出
x[負整数のベクトル] 複数の要素をまとめて取り除く
x[条件式] 条件に合致した要素を抽出
サンプルソース.R
(中略)
# ベクトル要素へのアクセス-------------

x <- c(1:10)

#5番目の要素を取り出す
x[5]

#5番目の要素を2に変更する
x[5] <- 2 %>>%
  print()

#1〜5番目の要素をまとめて取り出す
x[1:5]

#1〜5番目の要素をまとめて削除する
x[-1:-5]

#8以上の要素をまとめて取り出す
x[x > 8]

ベクトル要素の操作(置換・結合・挿入)

ベクトルにはアクセスするだけでなく、自在に置換、結合、挿入することもできます。

関数 説明
replace(x,y,z) xのy番目の要素をzに置換する
c(x,y,z,...) 複数のベクトルを結合する
append(x,y) 2つのベクトルを結合する
append(x,y,after=n) xのn番目の要素の後にyを挿入する
サンプルソース.R
(中略)
x <- 1:10

#xの1〜5番目の要素を0に置換する
y <- replace(x,1:5,0) %>>%
  print()

x <- 1:5
y <- 6:10
z <- 11:15

#2つのベクトルを結合する
append(x,y)

#2つ以上のベクトルを結合する
c(x,y,z)

#xの2番目の要素の後にyを挿入
append(x,y,after = 2)

おわりっ

4
5
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
4
5