R Language
ベクトルの作成
サーチ…
数字のシーケンス
:
演算子を使用して、コードの大きな塊をベクトル化するなど、一連の数値を作成します。
x <- 1:5
x
## [1] 1 2 3 4 5
これは両方の方法で動作します
10:4
# [1] 10 9 8 7 6 5 4
浮動小数点数であっても
1.25:5
# [1] 1.25 2.25 3.25 4.25
またはネガティブ
-4:4
#[1] -4 -3 -2 -1 0 1 2 3 4
seq()
seq
は、 :
演算子が1以外のステップを指定できるようにするより柔軟な関数です。
この関数は、 start
(デフォルトは1)からその番号を含む最後までのシーケンスを作成します。
end( to
)パラメータのみを指定できます
seq(5)
# [1] 1 2 3 4 5
開始と同様に
seq(2, 5) # or seq(from=2, to=5)
# [1] 2 3 4 5
そして最後に、ステップ( by
)
seq(2, 5, 0.5) # or seq(from=2, to=5, by=0.5)
# [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq
は、出力の所望の長さ( length.out
)が交互に供給される場合(任意に間隔が空いた)ステップを任意に推論することができる
seq(2,5, length.out = 10)
# [1] 2.0 2.3 2.6 2.9 3.2 3.5 3.8 4.1 4.4 4.7 5.0
シーケンスが別のベクトルと同じ長さを持つ必要がある場合は、 length.out = length(x)
略語としてalong.with
を使用できます。
x = 1:8
seq(2,5,along.with = x)
# [1] 2.000000 2.428571 2.857143 3.285714 3.714286 4.142857 4.571429 5.000000
で2つの有用な単純化された機能があるseq
:家族seq_along
、 seq_len
、およびseq.int
。 seq_along
関数とseq_len
関数は、1からNの自然数を構成します.Nは関数の引数、 seq_along
を持つベクトルまたはリストの長さ、 seq_along
の整数引数でseq_len
ます。
seq_along(x)
# [1] 1 2 3 4 5 6 7 8
seq_along
は、既存のオブジェクトのインデックスを返します。
# counting numbers 1 through 10
seq_len(10)
[1] 1 2 3 4 5 6 7 8 9 10
# indices of existing vector (or list) with seq_along
letters[1:10]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
seq_along(letters[1:10])
[1] 1 2 3 4 5 6 7 8 9 10
seq.int
は古代の互換性のために維持されるseq
と同じです。
また、非負の引数からシーケンスのベクトルを作成する古い関数sequence
もあります。
sequence(4)
# [1] 1 2 3 4
sequence(c(3, 2))
# [1] 1 2 3 1 2
sequence(c(3, 2, 5))
# [1] 1 2 3 1 2 1 2 3 4 5
ベクトル
Rのベクトルは、異なるタイプ(例えば、整数、論理、文字)を持つことができます。ベクトルを定義する最も一般的な方法は、関数vector()
を使うことです。
vector('integer',2) # creates a vector of integers of size 2.
vector('character',2) # creates a vector of characters of size 2.
vector('logical',2) # creates a vector of logicals of size 2.
しかし、Rでは、一般的には簡略関数が一般的です。
integer(2) # is the same as vector('integer',2) and creates an integer vector with two elements
character(2) # is the same as vector('integer',2) and creates an character vector with two elements
logical(2) # is the same as vector('logical',2) and creates an logical vector with two elements
デフォルト値以外の値を持つベクトルを作成することもできます。多くの場合、関数c()
がこれに使用されます。 cは結合または連結の略です。
c(1, 2) # creates a integer vector of two elements: 1 and 2.
c('a', 'b') # creates a character vector of two elements: a and b.
c(T,F) # creates a logical vector of two elements: TRUE and FALSE.
注目すべき重要な点は、Rは任意の整数(例えば1)をサイズ1の整数ベクトルとして解釈することである。同じことが数値(例えば1.1)、論理(例えばTまたはF)、または文字(例えば 'a')にも当てはまります。したがって、本質的にベクトルを組み合わせることになります。これはベクトルです。
同じようなベクトルを組み合わせる必要があることに注意してください。それ以外の場合、Rは同じタイプのベクトルのベクトルを変換しようとします。
c(1,1.1,'a',T) # all types (integer, numeric, character and logical) are converted to the 'lowest' type which is character.
ベクトルの要素を見つけることは、 [
演算子を使って行うことができます。
vec_int <- c(1,2,3)
vec_char <- c('a','b','c')
vec_int[2] # accessing the second element will return 2
vec_char[2] # accessing the second element will return 'b'
これは値の変更にも使用できます
vec_int[2] <- 5 # change the second value from 2 to 5
vec_int # returns [1] 1 5 3
最後に、 :
演算子(関数seq()
略)を使用して、数のベクトルを素早く作成することができます。
vec_int <- 1:10
vec_int # returns [1] 1 2 3 4 5 6 7 8 9 10
これは、ベクトルを(より簡単なサブセットからより複雑なサブセットに)
vec_char <- c('a','b','c','d','e')
vec_char[2:4] # returns [1] "b" "c" "d"
vec_char[c(1,3,5)] # returns [1] "a" "c" "e"
名前付きベクトルの作成
名前付きベクトルは、いくつかの方法で作成できます。 c
:
xc <- c('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)
結果は:
> xc
a b c d
5 6 7 8
list
:
xl <- list('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)
結果は:
> xl
$a
[1] 5
$b
[1] 6
$c
[1] 7
$d
[1] 8
setNames
関数を使用すると、同じ長さの2つのベクトルを使用して名前付きベクトルを作成できます。
x <- 5:8
y <- letters[1:4]
xy <- setNames(x, y)
その結果、名前付き整数ベクトルが生成されます。
> xy
a b c d
5 6 7 8
見て分かるように、これはc
法と同じ結果を与える。
また、同じ結果を得るためにnames
関数を使うこともできます:
xy <- 5:8
names(xy) <- letters[1:4]
このようなベクトルでは、要素を名前で選択することも可能です:
> xy["c"]
c
7
この機能により、そのような名前付きベクトルを参照ベクトル/テーブルとして使用して、値をデータフレーム内の別のベクトルまたは列の値に一致させることができます。次のデータフレームを考慮してください。
mydf <- data.frame(let = c('c','a','b','d'))
> mydf
let
1 c
2 a
3 b
4 d
mydf
xy
からの正しい値でnum
と呼ばれるmydf
データフレームに新しい変数を作成するとします。 match
関数を使用するmatch
、 xy
の適切な値を選択できます。
mydf$num <- xy[match(mydf$let, names(xy))]
結果は:
> mydf
let num
1 c 7
2 a 5
3 b 6
4 d 8
rep()関数を使ってベクトルを展開する
関数rep
は、かなり柔軟な方法でベクトルを繰り返すために使用できます。
# repeat counting numbers, 1 through 5 twice
rep(1:5, 2)
[1] 1 2 3 4 5 1 2 3 4 5
# repeat vector with incomplete recycling
rep(1:5, 2, length.out=7)
[1] 1 2 3 4 5 1 2
各議論は、観測/実験単位の統計ベクトルを、これらの単位を繰り返し観測してdata.frameのベクトルに拡張する場合に特に有用です。
# same except repeat each integer next to each other
rep(1:5, each=2)
[1] 1 1 2 2 3 3 4 4 5 5
このようなデータ構造への展開を含むrep
の優れた特徴は、長さ引数をベクトルの各要素を繰り返す回数で置き換えることによって、不平衡パネルへのベクトルの展開を実現できることです。
# automated length repetition
rep(1:5, 1:5)
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
# hand-fed repetition length vector
rep(1:5, c(1,1,1,2,2))
[1] 1 2 3 4 4 5 5
これは、データに応じて展開するベクトルを動的に構築するために、外部関数がrep
の2番目の引数を与えることを可能にする可能性を示します。
seq
と同様に、より速く簡略化されたrep
バージョンはrep_len
とrep.int
です。これらは、 rep
維持するいくつかの属性を落とします。したがって、速度が重要であり、繰り返されるベクトルの追加の側面が不要な状況で最も有用な場合があります。
# repeat counting numbers, 1 through 5 twice
rep.int(1:5, 2)
[1] 1 2 3 4 5 1 2 3 4 5
# repeat vector with incomplete recycling
rep_len(1:5, length.out=7)
[1] 1 2 3 4 5 1 2
ビルド定数からのベクトル:文字列と月名のシーケンス
R
には多数の定数があります。次の定数を使用できます。
-
LETTERS
:ローマ字の26大文字 -
letters
:ローマ字の26小文字 -
month.abb
:英語の月名の3文字の略語 -
month.name
:その年の月の英語名 -
pi
:円周とその直径の比
文字と月の定数から、ベクトルを作成することができます。
1)文字のシーケンス:
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
> LETTERS[7:9]
[1] "G" "H" "I"
> letters[c(1,5,3,2,4)]
[1] "a" "e" "c" "b" "d"
2)月の省略名または月名のシーケンス:
> month.abb
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> month.name[1:4]
[1] "January" "February" "March" "April"
> month.abb[c(3,6,9,12)]
[1] "Mar" "Jun" "Sep" "Dec"