R logo

Vector、Matrix、DataFrame、List etc. から [] (square brackets) を使って特定の要素へアクセスする方法。

ベクトル (Vector) の場合

Vectorを作る。

v <- c("a","b","c","d","e")
v
output
[1] "a" "b" "c" "d" "e"

このVectorの場合、左から1,2,3,4,5となる。

(Rは他のプログラミング言語と違い、0ではなく1から始まる。)

一つ要素にアクセス

このVectorの中の "a" にアクセスしたい場合は、

v[1]
output
[1] "a"

"c" (左から3番目) にアクセスしたい場合は、

v[3]
output
[1] "c"

特定の要素 "以外" の要素にアクセス

このVectorの中の "a" 以外にアクセスしたい場合は、

v[-1]
output
[1] "b" "c" "d" "e"

まとめてアクセス

このVectorの中の "a,b,c" に連続してアクセスしたい場合は、

v[1:3]
output
[1] "a" "b" "c"

"c,d,e" なら

v[3:5]
output
[1] "c" "d" "e"

飛び飛びにアクセス

飛び飛びに "c,d,e" へアクセスしたい場合は、

v[c(1,3,5)]
output
[1] "a" "c" "e"

これは、"b"と"d"以外、という意味でもあるから、下記と同じ。

v[c(-2,-4)]
output
[1] "a" "c" "e"

ある値以上(以下)の数値にアクセス

数値でVectorを構成する。

v2 <- c(1,2,3,4,5,6,7,8,9,10)
v2
output
[1] 1 2 3 4 5 6 7 8 9 10

このVectorの5より上の数値にアクセスしたい場合は

v2 <- c(1,2,3,4,5,6,7,8,9,10)
v2[v2 > 5]
output
[1] 6 7 8 9 10

5より下の数値にアクセスしたい場合は

v2 <- c(1,2,3,4,5,6,7,8,9,10)
v2[v2 < 5]
output
[1] 1 2 3 4

5以上の数値にアクセスしたい場合は

v2 <- c(1,2,3,4,5,6,7,8,9,10)
v2[v2 >= 5]
output
[1] 5 6 7 8 9 10

5以下の数値にアクセスしたい場合は

v2 <- c(1,2,3,4,5,6,7,8,9,10)
v2[v2 <= 5]
output
[1] 1 2 3 4 5

行列 (Matrix) の場合

Matrixを作る。

m <- matrix(1:6, ncol=2)
m
output
        [,1] [,2]
[1,]        1   4
[2,]        2   5
[3,]        3   6

今回は、ncol で列数を2に設定したので、3行、2列のMatrixができた。

行列の特定の要素へアクセス

Matrixの場合、2次元なので、[行,列]で要素にアクセスする。

上記Matrix "m" の1行目かつ2列目の要素 "4" へアクセスしたい時は、

m[1,2]
output
[1]     4

1行目と3行目の2列目アクセスしたい時は、

m[c(1,3),2]
output
[1]     4   6

行、列でアクセス

2行目にアクセスしたい時は、

m[2,]
output
[1]     2   5

2列目にアクセスしたい時は、

m[,2]
output
[1]     4   5   6

1行目と3行目アクセスしたい時は、

m[c(1,3),]
output
        [,1] [,2]
[1,]        1   4
[2,]        3   6

Matrixを維持して要素にアクセス

Matrixから特定の行や列だけ取り出すと、Vectorで返ってくる

m[,2]
output
[1]     4   5   6

この時Matrixを維持したい時は、

drop = FALSE

をつける。

m[,2, drop = FALSE]
output
        [,1]
[1,]     4
[2,]     5
[3,]     6

Matrixに行名や列名をつけて要素にアクセス

Matrixに行名と列名をつける。

m <- matrix(1:6, ncol=2)
colnames(m) <- c("Apple", "Banana")
rownames(m) <- c("alpha", "beta", "gamma")
m
output
         Apple  Banana
alpha        1         4
beta         2         5
gamma     3         6

ここから "beta" の行を取り出したい時は、

m["beta",]
output
      Apple Banana
beta      2         5

"alpha" と "gamma" の行を取り出したい時は、

m[c("alpha","gamma"),]
output
          Apple Banana
alpha        1          4
gamma     3          6

"Apple" の列を取り出したい時は、

m[,"Apple"]
output
alpha beta gamma
      1      2        3

Matrixを維持して "Apple" の列を取り出したい時は、

m[,"Apple", drop = FALSE]
output
         Apple
alpha        1
beta         2
gamma     3

データフレーム (DataFrame) の場合

DataFrameを作る。

今回は上記Matrix(m)をDataFrame(df)に変換。

df <- as.data.frame(m)
df

blacket-dataframe-1

本当にDataFrameになったかどうかは、

is.data.frame()

で確認できる。

is.data.frame(df)
output
[1] TRUE
is.matrix(df)
output
[1] FALSE

最初から作る場合は、

data.frame()

で作る。

df <- data.frame(
    Apple=c(1,2,3),
    Banana=c(4,5,6)
    )
rownames(df) <- c("alpha","beta","gamma")
df

blacket-dataframe-2

行番号、列番号でアクセス

Matrixと同じように、[行番号,列番号]でアクセスできる。

1行目にアクセス

df[1,]

blacket-dataframe-3

1列目にアクセス

df[,1]
output
[1] 1 2 3

1行目/1列目にアクセス

df[1,1]
output
[1] 1

行名、列名でアクセス

番号ではなく、行名や列名でも養素にアクセスできる。

1行目(alpha)にアクセス

df["alpha",]

blacket-dataframe-3

1列目(Apple)にアクセス

df[,"Apple"]
output
[1] 1 2 3

1行目(alpha)/1列目(Apple)にアクセス

df[1,1]
output
[1] 1

列をVectorにしてアクセス

[[ ]] (double square brackets) を使うと、列をVectorとしてアクセスできる。

1列目(Apple)にアクセス

df[[1]]
output
[1] 1 2 3
df[["Apple"]]
output
[1] 1 2 3

 

※ 行には使えない。

df[["alpha"]]
output
[1] NULL

リスト (List) の場合

List を作る。

リストは異なるデータ構造を複数個格納することができるデータ構造の事。

Vector, Matrix, DataFrameなども混ぜて格納できる。

my_list <- list(
    v=c(1,2,3,4,5,6),
    v2=c("a","b","c"),
    m=matrix(1:6, ncol=2),
    df=data.frame(
        Fruit=c("Apple","Banana","Orange"),
        Number=c(11,12,13),
        Country=c("Japan","USA","China")
        )
)
my_list
output
$v
[1] 1 2 3 4 5 6

$v2
[1] "a" "b" "c"

$m
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

$df
blacket-dataframe-4

Listは、アクセス方法によって戻り値がList型かリストに格納されているデータ構造になるかが異なる。

[ ] 戻り値がリスト型

[ ] (single square brackets) を使うと、戻り値はリスト型になる。

my_list[1]
my_list[2]
my_list[3]
my_list[4]
output
> my_list[1]
$v
[1] 1 2 3 4 5 6

> my_list[2]
$v2
[1] "a" "b" "c"

> my_list[3]
$m
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

> my_list[4]
$df
blacket-dataframe-4
class(my_list[1])
class(my_list[2])
class(my_list[3])
class(my_list[4])
output
> class(my_list[1])
[1] "list"
> class(my_list[2])
[1] "list"
> class(my_list[3])
[1] "list"
> class(my_list[4])
[1] "list"

[[ ]] 戻り値が格納されているデータ構造型

[[ ]] (double square brackets) を使うと、戻り値は格納されているデータ構造の型になる。

my_list[[1]]
my_list[[2]]
my_list[[3]]
my_list[[4]]
output
> my_list[[1]]
[1] 1 2 3 4 5 6

> my_list[[2]]
[1] "a" "b" "c"

> my_list[[3]]
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

> my_list[[4]]
blacket-dataframe-4
class(my_list[1])
class(my_list[2])
class(my_list[3])
class(my_list[4])
output
> class(my_list[[1]])
[1] "numeric"
> class(my_list[[2]])
[1] "character"
> class(my_list[[3]])
[1] "matrix" "array"
> class(my_list[[4]])
[1] "data.frame"

List の中の各データ構造内の要素にアクセス

例えば、上記 my_list の3番目の matrix 内の1行目2列目にアクセスしたい場合は、

my_list[[3]][1,2]
output
[1] 4

References

にほんブログ村 子育てブログ ワーキングマザー育児へ