ミクロ政治データ分析実習

第7回 データ型

(そん)  財泫(じぇひょん)

関西大学総合情報学部

2023-05-25

データ型

データ型とは

  • Rにおける最小単位であるベクトル(vector)内の要素の種類
    • ベクトルはデータ構造(data structure)の一つ
    • \(\bigcirc\bigcirc\bigcirc\)型ベクトル呼ぶ。
      • 例) 全ての要素が数値型(numeric型)なら「numeric型ベクトル」
      • 例) 全ての要素が文字型(character型)なら「character型ベクトル」

データ型の種類

以下のデータ型はRが提供しているデータ型の一部(太字は本講義で紹介するデータ型)

  • Logical
  • Numeric
  • Complex
  • Character
  • Factor
  • Date
  • NA
  • NULL
  • その他

データ型の確認

class()関数を使用

  • オブジェクトがベクトルの場合はデータが出力され、ベクトル以外の場合はデータ構造が出力される。
my_vec1 <- c(2, 3, 5, 7, 11)
my_vec2 <- c("Ramen", "Soba", "Udon")
my_vec3 <- c(TRUE, TRUE, FALSE, FALSE)


class(my_vec1) # my_vec1のデータ型は?
[1] "numeric"
class(my_vec2) # my_vec2のデータ型は?
[1] "character"
class(my_vec3) # my_vec3のデータ型は?
[1] "logical"

Logical型

Logical型: 紹介

  • TRUEFALSEのみで構成されるデータ型
    • 論理型とも呼ばれる。
logi_vec1 <- (2 + 3) == (2 * 3)
logi_vec1
[1] FALSE


  • logi_vec1のデータ型の確認
class(logi_vec1)
[1] "logical"


  • あるベクトルがlogical型かどうかはis.logical()で確認可能。
    • ()内のオブジェクトがlogical型ならTRUE、それ以外はFALSEが返ってくる。
is.logical(logi_vec1)
[1] TRUE

Logical型: 作成

  • 長さ2以上のlogical型ベクトルを作成する場合、c()を使用
    • TRUEFALSE"で囲んではいけない(character型として認識される)。
logi_vec2 <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
  • ただし、このように直接logical型ベクトルを作成することは非常に稀であり、通常、論理演算子の計算から得られた結果で作成する。
my_vec4 <- 1:15
logi_vec3 <- my_vec4 %% 3 == 0 # my_vec4の要素は3で割り切れるか

Logical型: 活用

  • 何かの条件(=論理演算子)に合致する要素のみを抽出する際に使用
my_vec4[logi_vec3]
[1]  3  6  9 12 15


  • Logical型ベクトルを作成せず、[]内に直接打ち込んでも良い
# my_vec4の要素の中から3で割り切れる要素(=3の倍数)を抽出する。
my_vec4[my_vec4 %% 3 == 0]
[1]  3  6  9 12 15

Numeric型

Numeric型

  • 第3回講義を参照

Character型

Character型: 紹介&作成

  • 要素が"で囲まれているデータ型
    • 文字型とも呼ばれる。
    • 長さ2以上のcharacter型のベクトル作成はc()を使用
char_vec1 <- c("Kansai", "Kwansei-gakuin", "Doshisha", "Ritsumeikan")
char_vec1
[1] "Kansai"         "Kwansei-gakuin" "Doshisha"       "Ritsumeikan"   


  • char_vec1のデータ型の確認
class(char_vec1)
[1] "character"


  • あるベクトルがcharacter型かどうかはis.character()で確認可能。
    • ()内のオブジェクトがlogical型ならTRUE、それ以外はFALSEが返ってくる。
is.character(char_vec1)
[1] TRUE

Character型: 活用

  • 文字列の長さ
    • length(): ベクトルの長さ
    • nchar(): 各要素の文字数
length(char_vec1) # char_vec1の長さ
[1] 4
nchar(char_vec1)  # char_vec1の各要素の文字数
[1]  6 14  8 11
  • paste(): 文字列の結合
    • paste0()にすると、結合時、スペースが入らない。
# 各要素の後にUniversityを付ける(スペースあり)
char_vec2 <- paste(char_vec1, "Univeristy")
char_vec2
[1] "Kansai Univeristy"         "Kwansei-gakuin Univeristy"
[3] "Doshisha Univeristy"       "Ritsumeikan Univeristy"   

Factor型

Factor型

  • 順序付き文字型
    • 主に図表を作成する際に使用する。

列名の下が<chr>ならcharacter型、<fct>ならfactor型

大学名がcharacter型の場合

# A tibble: 4 × 2
  大学名         学生数
  <chr>           <dbl>
1 Ritsumeikan     32467
2 Kwansei-gakuin  23671
3 Kansai          27736
4 Doshisha        25974

大学名がfactor型の場合

  • 順番は関西-関学-同志社-立命館
# A tibble: 4 × 2
  大学名         学生数
  <fct>           <dbl>
1 Ritsumeikan     32467
2 Kwansei-gakuin  23671
3 Kansai          27736
4 Doshisha        25974

行のソートについてはデータ・ハンドリングの講義にて解説

大学名がcharacter型の場合

  • アルファベット順になる。
# A tibble: 4 × 2
  大学名         学生数
  <chr>           <dbl>
1 Doshisha        25974
2 Kansai          27736
3 Kwansei-gakuin  23671
4 Ritsumeikan     32467

大学名がfactor型の場合

  • 予め指定した順番で表示される。
# A tibble: 4 × 2
  大学名         学生数
  <fct>           <dbl>
1 Kansai          27736
2 Kwansei-gakuin  23671
3 Doshisha        25974
4 Ritsumeikan     32467

作図については可視化の講義にて解説

大学名がcharacter型の場合

  • アルファベット順になる。

大学名がfactor型の場合

  • 予め指定した順番で表示される。

Factor型: 作成 (1)

  • Character型からfactor型へ
char_vec3 <- c("Ritsumeikan", "Kwansei-gakuin", "Kansai", "Doshisha")
char_vec3
[1] "Ritsumeikan"    "Kwansei-gakuin" "Kansai"         "Doshisha"      
class(char_vec3)
[1] "character"
  • 要素をソートしてみると、アルファベット順になる。
    • sort()関数を使用
sort(char_vec3)
[1] "Doshisha"       "Kansai"         "Kwansei-gakuin" "Ritsumeikan"   

Factor型: 作成 (2)

  • factor()関数でfactor化
    • levels引数に順番を指定すること
    • factor型ベクトルを出力すると水準 (level)の順番も下に表示される。
fct_vec1 <- factor(char_vec3, 
                   levels = c("Kansai", "Kwansei-gakuin", "Doshisha", "Ritsumeikan"))
fct_vec1
[1] Ritsumeikan    Kwansei-gakuin Kansai         Doshisha      
Levels: Kansai Kwansei-gakuin Doshisha Ritsumeikan
class(fct_vec1)
[1] "factor"
  • 要素をソートしてみると、予め指定した順番になる。
sort(fct_vec1)
[1] Kansai         Kwansei-gakuin Doshisha       Ritsumeikan   
Levels: Kansai Kwansei-gakuin Doshisha Ritsumeikan

Factor型: 作成 (3)

  • Numeric型変数のFactor化
    • factor()内にlevelslabelsを両方指定する(Charactrer型のfactor化はlevelsのみで十分)。
    • 多くのデータはサイズを小さくするために、文字列より数値を使用する。
    • たとえば、「北海道」は「1」、「青森県」は「2」、…、「沖縄県」は「47」のように
  • 例)男性は1、女性が2の場合、各値にラベルを付け、順番を女性、男性にする場合
gender_vec <- c(2, 2, 1, 2, 1, 1, 1, 1, 2)
gender_vec
[1] 2 2 1 2 1 1 1 1 2
gender_fct <- factor(gender_vec, levels = c(2, 1), labels = c("女性", "男性"))
gender_fct
[1] 女性 女性 男性 女性 男性 男性 男性 男性 女性
Levels: 女性 男性

Factor型: 活用

  • 詳細はデータハンドリング、および可視化の講義で説明

欠損値

欠損値

  • 欠損値(missing value)
    • 何らかの値があるはずであるものの、観察されていない値である。
    • 例) 人間開発指数(Human Development Index; HDI)」では世界各国のデータが含まれているものの、台湾や北朝鮮のデータは含まれていない。これらの国(地域)に人間開発という概念がないわけではなく、なんらかの理由(今回は政治的な理由)で値が欠損しているだけ


  • 欠損値以外に計算上、何らかの問題を生じさせ得る値
意味
NA 何らかの値があるはずだが、欠損している状態
NULL そもそも存在しない
NaN 計算不可 0 / 0
Inf 無限大 10 / 0

NAとNULL (1)

Vec1 <- c(1, 2, 3, 5, 7, 11, 13)
Vec2 <- c(1, NA, 3, 5, NA, NA, 13)
Vec3 <- c(1, NULL, 3, 5, NULL, NULL, 13)


Vec1
[1]  1  2  3  5  7 11 13
Vec2
[1]  1 NA  3  5 NA NA 13
Vec3
[1]  1  3  5 13
length(Vec1)
[1] 7
length(Vec2)
[1] 7
length(Vec3)
[1] 4

NAとNULL (2)

初心者レベルでNULLを使うことはないが、中級以上からは(そこそこ)使う機会がある。

欠損値が含まれたベクトルの動き

  • mean()関数でVec2の平均値を計算してみよう。
mean(Vec2)
[1] NA
  • コンソール上で?meanを入力し、mean()関数の詳細について調べてみると、mean()関数で使用可能な引数の一覧が表示される。
na.rm    a logical value indicating whether NA values should be stripped before 
         the computation proceeds.
  • 意味: 「na.rmはlogical型の値であり、計算の前に欠損値(NA)を除去するか否かを示す引数である。」


mean(Vec2, na.rm = TRUE)
[1] 5.5
  • このように一部の関数では欠損値が含まれているオブジェクトの計算ができないため、おかしいと思ったらヘルプを読んでみること。

ベクトル内要素の操作

共通: 要素の追加

my_vec5 <- c(4, 3, 2, 1)
my_vec5
[1] 4 3 2 1
  • my_vec5の5番目の要素として、0を追加
my_vec5[5] <- 0
my_vec5
[1] 4 3 2 1 0
  • my_vec5の6、7、8番目の要素として、-1、-2、-3を追加
# 6:8の代わりにc(6, 7, 8)もOK
my_vec5[6:8] <- c(-1, -2, -3)
my_vec5
[1]  4  3  2  1  0 -1 -2 -3
  • my_vec5の11番目に10を入れたら?
my_vec5[11] <- 10
my_vec5
 [1]  4  3  2  1  0 -1 -2 -3 NA NA 10

共通: 要素の置換

  • 要素の追加と方法は同じ
my_vec5[11] <- -6
my_vec5
 [1]  4  3  2  1  0 -1 -2 -3 NA NA -6
  • 複数の要素を置換する場合
my_vec5[9:10] <- c(-4, -5)
my_vec5
 [1]  4  3  2  1  0 -1 -2 -3 -4 -5 -6
  • my_vec5の要素の中から0より小さい要素に-1を掛けて置換する。
my_vec5[my_vec5 < 0] <- my_vec5[my_vec5 < 0] * -1
my_vec5
 [1] 4 3 2 1 0 1 2 3 4 5 6