・お題:リストの使い方が分からないので、メモしておきたい。
・リストは、形式の異なるデータを詰め込めるデータ構造のこと。使うたびにググっていたので、少しまとめたい。
・とりあえずデータを作る。
> library(tidyverse) #Rを便利に使うパッケージ
> data <- list()
>
> data$ID <- c("A", "B", "C", "D", "E")
> data$Score <- c(1, 2, 3, 4, 5)
> data$Score2 <- c(1.1, 2.2, 3.3, 4.4, 5.5)
> data
・データを取り出してみる。
> data["ID"] #角ばった括弧で取り出せる。
$ID
[1] "A" "B" "C" "D" "E"
> data[c("ID", "Score") ] #ベクトルで指定しても取り出せる
$ID
[1] "A" "B" "C" "D" "E"
$Score
[1] 1 2 3 4 5
・こうして取り出すと、リスト形式になる。
> data["ID"] %>% is.list()
[1] TRUE
・ちなみに、パイプ演算子にも渡せるぽい。
> data %>% .["ID"]
$ID
[1] "A" "B" "C" "D" "E"
・角ばった括弧を二重にした演算子を使うと、ベクトルで取り出せる。
> data[ ["ID"] ] #二重角ばり括弧はブログの表示がおかしくなるので、スペースを入れてある。R上ではスペースを入れちゃダメ。
[1] "A" "B" "C" "D" "E"
> data[ ["ID"] ] %>% is.vector()
[1] TRUE
> data %>% .[ ["ID"] ]
[1] "A" "B" "C" "D" "E"
・ドルマークでも取り出せる。ドルマークだと、$まで入力すると候補で出てくれるので便利。この場合もベクトルで取り出されるし、パイプ演算子で渡せる。
> data$ID
[1] "A" "B" "C" "D" "E"
> data$ID %>% is.vector()
[1] TRUE
> data %>% .$ID
[1] "A" "B" "C" "D" "E"
・角ばった括弧だと、BOOLのベクトルを渡しても取り出してくれる。除外するときに便利。
> data[c(TRUE, FALSE, TRUE) ]
$ID
[1] "A" "B" "C" "D" "E"
$Score2
[1] 1.1 2.2 3.3 4.4 5.5
> data[names(data) == "Score2"]
$Score2
[1] 1.1 2.2 3.3 4.4 5.5
> data[names(data) != "Score2"]
$ID
[1] "A" "B" "C" "D" "E"
$Score
[1] 1 2 3 4 5
・ちなみに、二重角ばり括弧にBOOL型を渡すと怒られる。
> data[ [names(data) == "Score2"] ]
Error in data[ [names(data) == "Score2"] ] :
attempt to select less than one element in integerOneIndex
・要素名ではなく、要素のインデックスを与えても取り出すことができる。これだと要素のインデックスにマイナスをつけるだけでその要素を除外できる。
> names(data)
[1] "ID" "Score" "Score2"
> data[1]
$ID
[1] "A" "B" "C" "D" "E"
> data[ [2] ]
[1] 1 2 3 4 5
> data[1:2]
$ID
[1] "A" "B" "C" "D" "E"
$Score
[1] 1 2 3 4 5
> data[-2]
$ID
[1] "A" "B" "C" "D" "E"
$Score2
[1] 1.1 2.2 3.3 4.4 5.5
・data.frameにするなら、as.data.frame関数を使う。
> df <- as.data.frame(data)
> df
・例えば、Scoreが2以上の行を抜き出す。
> df[df$Score > 2,]
おわり