# 本題に入る前に、対象とするベクトルを作る必要があります。
# 次のコマンドを実行してください。
set.seed(10)
x <- sample(c(rnorm(100), rep(NA, 50)), 40)
x
## [1] 0.18492596 1.52258634 0.14816796 NA -2.18528684
## [6] 0.89292590 NA NA -1.75908675 NA
## [11] 1.22702839 1.15534832 NA -0.90221194 -1.20807618
## [16] NA NA 0.38092221 NA -0.95494386
## [21] 0.98744470 -1.18394507 NA NA 1.08655140
## [26] -0.10176101 0.23252515 NA NA NA
## [31] 0.34011564 0.50581926 NA -0.37366156 -0.07395583
## [36] -0.07794607 NA 0.29098749 0.06954478 -0.22266151
# これで全員が同じデータを処理することになります。
# では、まず、xの最初の10個の要素を取り出してください。
## [1] 0.1849260 1.5225863 0.1481680 NA -2.1852868 0.8929259
## [7] NA NA -1.7590868 NA
# x[is.na(x)] はどんな値になると思いますか。何番でしょうか。
# 1: すべてが NAのベクトル
# 2: TRUEとFALSEのベクトル
# 3: 長さ0 のベクトル
# 4: NAを持たないベクトル
# 実際に実行して確認してください。
# 次に
y <- x[!is.na(x)]
# を実行してください。そして次に y を表示させましょう。
y
## [1] 0.18492596 1.52258634 0.14816796 -2.18528684 0.89292590
## [6] -1.75908675 1.22702839 1.15534832 -0.90221194 -1.20807618
## [11] 0.38092221 -0.95494386 0.98744470 -1.18394507 1.08655140
## [16] -0.10176101 0.23252515 0.34011564 0.50581926 -0.37366156
## [21] -0.07395583 -0.07794607 0.29098749 0.06954478 -0.22266151
# 次に、 y[y > 0] はどんな結果になるでしょうか。次の何番でしょうか。
# 1: すべてが NAのベクトル
# 2: TRUE と FALSE から構成されるベクトル
# 3: y のうち、すべてが正の数のベクトル
# 4: y のうち、すべてが負の数のベクトル
# 5: 長さ0のベクトル
# では、実行して確認しましょう。
y[y > 0]
## [1] 0.18492596 1.52258634 0.14816796 0.89292590 1.22702839 1.15534832
## [7] 0.38092221 0.98744470 1.08655140 0.23252515 0.34011564 0.50581926
## [13] 0.29098749 0.06954478
# NAの値を持つ x についてもどうなるか、x[x > 0]を実行してみましょう。
x[x > 0]
## [1] 0.18492596 1.52258634 0.14816796 NA 0.89292590 NA
## [7] NA NA 1.22702839 1.15534832 NA NA
## [13] NA 0.38092221 NA 0.98744470 NA NA
## [19] 1.08655140 0.23252515 NA NA NA 0.34011564
## [25] 0.50581926 NA NA 0.29098749 0.06954478
# x[!is.na(x) & x > 0] を実行すると、xのうち、NAではなく、且つ、正の数を取り出すことができます。
# 実行してみましょう。
x[!is.na(x) & x > 0]
## [1] 0.18492596 1.52258634 0.14816796 0.89292590 1.22702839 1.15534832
## [7] 0.38092221 0.98744470 1.08655140 0.23252515 0.34011564 0.50581926
## [13] 0.29098749 0.06954478
# 次に、c( )を使って、x の3番目、5番目、7番目の要素を取り出してください。
## [1] 0.148168 -2.185287 NA
# x[c(2, 10)]はx の2番目と10番目の要素を取り出しますが、反対に、2番目と10番目の要素以外の要素を
# 取り出したいということもあるでしょう。
# その場合は
x[c(-2, -10)]
## [1] 0.18492596 0.14816796 NA -2.18528684 0.89292590
## [6] NA NA -1.75908675 1.22702839 1.15534832
## [11] NA -0.90221194 -1.20807618 NA NA
## [16] 0.38092221 NA -0.95494386 0.98744470 -1.18394507
## [21] NA NA 1.08655140 -0.10176101 0.23252515
## [26] NA NA NA 0.34011564 0.50581926
## [31] NA -0.37366156 -0.07395583 -0.07794607 NA
## [36] 0.29098749 0.06954478 -0.22266151
# を実行します。
# x[-c(2, 10)] も同じ結果となります。実行してみましょう。
x[-c(2, 10)]
## [1] 0.18492596 0.14816796 NA -2.18528684 0.89292590
## [6] NA NA -1.75908675 1.22702839 1.15534832
## [11] NA -0.90221194 -1.20807618 NA NA
## [16] 0.38092221 NA -0.95494386 0.98744470 -1.18394507
## [21] NA NA 1.08655140 -0.10176101 0.23252515
## [26] NA NA NA 0.34011564 0.50581926
## [31] NA -0.37366156 -0.07395583 -0.07794607 NA
## [36] 0.29098749 0.06954478 -0.22266151
# 次に、ベクトルの要素に名前を付けることについて学びます。
vect <- c(foo=11, bar=2, norf=NA)
vect
## foo bar norf
## 11 2 NA
# ベクトルの要素に名前が付いていることが分かります。
# その名前だけを取り出すときは
names(vect)
## [1] "foo" "bar" "norf"
# 要素に名前のないベクトルはこんな感じですね。
vect2 <- c(11, 2, NA)
vect2
## [1] 11 2 NA
# これに名前を付けてましょう。
names(vect2) <- c("foo", "bar", "norf")
# vect と vect2 が同じものかどうかは identical( )により確認できます。
identical(vect, vect2)
## [1] TRUE
# vectの2つ目の要素だけを取り出してみましょう。どうすればいいですか。そのコマンドを実行してください。
## bar
## 2
# 別の方法でも実行してください。
## bar
## 2
# 最後に、vectの2つ目と3つ目の要素だけを取り出すコマンドを実行してみましょう。
vect[2:3]
## bar norf
## 2 NA
vect[c("foo", "bar")]
## foo bar
## 11 2