LoginSignup
80
107

More than 3 years have passed since last update.

Rでデータフレームからデータを抽出(検索)

Last updated at Posted at 2015-03-06
都道府県    国語A 国語B 算数A 算数B
北海道   71.8    52.9    75.8    55.2
青森県   76.6    60.5    81.3    60.8
岩手県   73.7    58.3    78.9    58.7
宮城県   74.2    54.3    77.3    56.8
秋田県   77.4    67.3    85.1    66.2
山形県   74.3    56.7    77.8    57.7
福島県   73.3    57.0    78.7    57.8
茨城県   76.9    57.4    79.7    58.6
栃木県   71.9    54.5    77.7    56.8
群馬県   73.6    55.5    78.0    57.8
埼玉県   72.5    55.5    76.9    57.8
千葉県   75.8    55.5    78.2    58.8
東京都   75.5    57.2    79.4    61.2

というCSVファイルを読み込んで、answer というオブジェクトにセットされているとき。
(一番上の 都道府県 国語A 国語B 算数A 算数B は、Header として扱われている)

行番号と列番号を指定して抽出

> # 1行目、3列目のデータ(52.9)を抽出
> answer[1,3]
[1] 52.9

行番号で抽出

行番号が一致するデータを抽出

> # 3行目を抽出
> answer[3,]
  都道府県 国語A 国語B 算数A 算数B
3   岩手県  73.7  58.3  78.9  58.7

行番号が一致する範囲のデータを抽出

> # 3~5行目を抽出
> answer[3:5,]
  都道府県 国語A 国語B 算数A 算数B
3   岩手県  73.7  58.3  78.9  58.7
4   宮城県  74.2  54.3  77.3  56.8
5   秋田県  77.4  67.3  85.1  66.2

列番号で抽出

列番号が一致するデータを抽出

> #3列目を抽出
> answer[,3]
 [1] 52.9 60.5 58.3 54.3 67.3 56.7 57.0 57.4 54.5 55.5 55.5 55.5 57.2

列番号が一致する範囲のデータを抽出

> #3列目~4列目を抽出
> answer[,3:4]
   国語B 算数A
1   52.9  75.8
2   60.5  81.3
3   58.3  78.9
4   54.3  77.3
5   67.3  85.1
6   56.7  77.8
7   57.0  78.7
8   57.4  79.7
9   54.5  77.7
10  55.5  78.0
11  55.5  76.9
12  55.5  78.2
13  57.2  79.4

Headerをキーに、比較演算子がマッチするデータを抽出

文字列一致

> # Header[都道府県]が岩手県の行を抽出
> answer[answer$都道府県=="岩手県",]
  都道府県 国語A 国語B 算数A 算数B
3   岩手県  73.7  58.3  78.9  58.7

数値の比較

> # Header[算数B]の値が60以上の行を抽出

> answer[answer$算数B>60, ]
   都道府県 国語A 国語B 算数A 算数B
2    青森県  76.6  60.5  81.3  60.8
5    秋田県  77.4  67.3  85.1  66.2
13   東京都  75.5  57.2  79.4  61.2
  • データフレームの変数とHeaderの区切りは$記号を使う
  • [都道府県]や[数学B]はHeaderなのでクオートの必要はない
  • 文字列比較の場合は、比較演算子として == を使う
  • 数値比較の場合は、比較演算子として < や > を使う
  • "岩手県"は文字列なので、ダブルクオートでくくる
  • 行を抽出するので最後に[,]が必要

複数の条件によるマッチ

比較演算を[ & ]記号で繋げる

#国語Aが75以上で、算数Bが55以下
> answer[ answer$国語A > 75 & answer$算数B < 55, ]

ソートして表示する

> # [算数A]の列の値で昇順にソートする
> answer[ order( answer$算数A ), ]
   都道府県 国語A 国語B 算数A 算数B
1    北海道  71.8  52.9  75.8  55.2
11   埼玉県  72.5  55.5  76.9  57.8
4    宮城県  74.2  54.3  77.3  56.8
9    栃木県  71.9  54.5  77.7  56.8
6    山形県  74.3  56.7  77.8  57.7
10   群馬県  73.6  55.5  78.0  57.8
12   千葉県  75.8  55.5  78.2  58.8
7    福島県  73.3  57.0  78.7  57.8
3    岩手県  73.7  58.3  78.9  58.7
13   東京都  75.5  57.2  79.4  61.2
8    茨城県  76.9  57.4  79.7  58.6
2    青森県  76.6  60.5  81.3  60.8
5    秋田県  77.4  67.3  85.1  66.2

> # [算数A]の列の値で降順にソートする
> answer[ order( -answer$算数A ), ]
   都道府県 国語A 国語B 算数A 算数B
5    秋田県  77.4  67.3  85.1  66.2
2    青森県  76.6  60.5  81.3  60.8
8    茨城県  76.9  57.4  79.7  58.6
13   東京都  75.5  57.2  79.4  61.2
3    岩手県  73.7  58.3  78.9  58.7
7    福島県  73.3  57.0  78.7  57.8
12   千葉県  75.8  55.5  78.2  58.8
10   群馬県  73.6  55.5  78.0  57.8
6    山形県  74.3  56.7  77.8  57.7
9    栃木県  71.9  54.5  77.7  56.8
4    宮城県  74.2  54.3  77.3  56.8
11   埼玉県  72.5  55.5  76.9  57.8
1    北海道  71.8  52.9  75.8  55.2
80
107
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
107