mpg

filter

library(ggplot2)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
mpg %>% filter(manufacturer =="audi")
# A tibble: 18 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
 2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
 3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
 4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
 5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
 6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
11 audi         a4 quattro   2    2008     4 auto… 4        19    27 p     comp…
12 audi         a4 quattro   2.8  1999     6 auto… 4        15    25 p     comp…
13 audi         a4 quattro   2.8  1999     6 manu… 4        17    25 p     comp…
14 audi         a4 quattro   3.1  2008     6 auto… 4        17    25 p     comp…
15 audi         a4 quattro   3.1  2008     6 manu… 4        15    25 p     comp…
16 audi         a6 quattro   2.8  1999     6 auto… 4        15    24 p     mids…
17 audi         a6 quattro   3.1  2008     6 auto… 4        17    25 p     mids…
18 audi         a6 quattro   4.2  2008     8 auto… 4        16    23 p     mids…

R言語を使って、mpg データセットから「audi」という製造業者のデータのみを抽出するコードについて説明します。まず、dplyr パッケージの filter 関数を使用して、manufacturer が “audi” に一致する行だけを選び出します。

mpg %>% 
  filter(manufacturer == "audi", cyl >= 6)
# A tibble: 10 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
 2 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
 3 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 4 audi         a4 quattro   2.8  1999     6 auto… 4        15    25 p     comp…
 5 audi         a4 quattro   2.8  1999     6 manu… 4        17    25 p     comp…
 6 audi         a4 quattro   3.1  2008     6 auto… 4        17    25 p     comp…
 7 audi         a4 quattro   3.1  2008     6 manu… 4        15    25 p     comp…
 8 audi         a6 quattro   2.8  1999     6 auto… 4        15    24 p     mids…
 9 audi         a6 quattro   3.1  2008     6 auto… 4        17    25 p     mids…
10 audi         a6 quattro   4.2  2008     8 auto… 4        16    23 p     mids…

このコードは、mpg データセットを利用して特定の条件に基づきデータを絞り込むためのものです。dplyr パッケージの filter 関数を使用しています。

具体的には、manufacturer == "audi" という条件で製造業者が “audi” であるデータのみを抽出し、さらに cyl >= 6 という条件でシリンダー数が6以上のもののみをさらに絞り込んでいます。つまり、このコードは「Audi」ブランドで、かつシリンダー数が6以上の車両のデータのみを選び出しています。

結果として得られるデータセットは、これらの条件を満たすAudiの車両のみを含むものになります。これにより、特定の基準に基づくデータの分析や操作が容易になります。

mpg %>% 
  filter(manufacturer == "audi" & cyl >= 6)
# A tibble: 10 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
 2 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
 3 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 4 audi         a4 quattro   2.8  1999     6 auto… 4        15    25 p     comp…
 5 audi         a4 quattro   2.8  1999     6 manu… 4        17    25 p     comp…
 6 audi         a4 quattro   3.1  2008     6 auto… 4        17    25 p     comp…
 7 audi         a4 quattro   3.1  2008     6 manu… 4        15    25 p     comp…
 8 audi         a6 quattro   2.8  1999     6 auto… 4        15    24 p     mids…
 9 audi         a6 quattro   3.1  2008     6 auto… 4        17    25 p     mids…
10 audi         a6 quattro   4.2  2008     8 auto… 4        16    23 p     mids…

このコードでは、製造業者が “audi” であり(manufacturer == "audi")、かつシリンダー数が6以上である(cyl >= 6)車両のデータを抽出しています。条件は論理演算子 & を用いて結合されており、これにより両方の条件を満たす行のみが選択されます。

結果として、Audiの車両のうちシリンダー数が6以上のもののデータが含まれたデータセットが得られます。このようなデータセットは、特定の条件を満たす車両の詳細分析や比較に便利です。

R言語における演算子の優先順位では、比較演算子(例:==)が論理演算子(例:&)よりも優先度が高いです。つまり、比較演算子である == の評価が先に行われ、その結果が次に論理演算子 & で使われます。

このため、式 manufacturer == "audi" & cyl >= 6 では、まず manufacturer == "audi"cyl >= 6 の各比較が評価され、その後これらの結果に基づいて & 演算が適用されます。この適用により、両方の条件を満たすデータ行だけが選択されることになります。

mpg %>% 
  filter(manufacturer == "audi" | cyl >= 6)
# A tibble: 157 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
 2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
 3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
 4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
 5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
 6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
# ℹ 147 more rows

製造業者が “audi” であるか、またはシリンダー数が6以上である車両のデータを抽出しています。この条件は論理演算子 | (OR)を使って結合されており、いずれか一方の条件を満たす行が選択されます。

つまり、このコードはAudi製の車両、またはシリンダー数が6以上の車両(どのメーカーでも)のデータを含むデータセットを生成します。このフィルタリングにより、より広範な条件に基づいてデータを絞り込むことができます。

arrange

mpg %>%
  arrange(cty)
# A tibble: 234 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 dodge        dakota pi…   4.7  2008     8 auto… 4         9    12 e     pick…
 2 dodge        durango 4…   4.7  2008     8 auto… 4         9    12 e     suv  
 3 dodge        ram 1500 …   4.7  2008     8 auto… 4         9    12 e     pick…
 4 dodge        ram 1500 …   4.7  2008     8 manu… 4         9    12 e     pick…
 5 jeep         grand che…   4.7  2008     8 auto… 4         9    12 e     suv  
 6 chevrolet    c1500 sub…   5.3  2008     8 auto… r        11    15 e     suv  
 7 chevrolet    k1500 tah…   5.3  2008     8 auto… 4        11    14 e     suv  
 8 chevrolet    k1500 tah…   5.7  1999     8 auto… 4        11    15 r     suv  
 9 dodge        caravan 2…   3.3  2008     6 auto… f        11    17 e     mini…
10 dodge        dakota pi…   5.2  1999     8 manu… 4        11    17 r     pick…
# ℹ 224 more rows

このR言語のコードは、mpg データセットに対して並び替えを行うものです。ここで使用されている dplyr パッケージの arrange 関数を用いています。

具体的には、cty(市街地燃費)の値に基づいてデータを昇順に並び替えています。arrange(cty) の部分がその処理を指定しており、cty の値が小さいものから大きいものへと順番に並べ替えられます。

このコードを実行することで、市街地燃費が低い車両から高い車両へとデータが整理され、燃費の低い車両から順にデータを確認することができます。

mpg %>% 
  arrange(cty, hwy)
# A tibble: 234 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 dodge        dakota pi…   4.7  2008     8 auto… 4         9    12 e     pick…
 2 dodge        durango 4…   4.7  2008     8 auto… 4         9    12 e     suv  
 3 dodge        ram 1500 …   4.7  2008     8 auto… 4         9    12 e     pick…
 4 dodge        ram 1500 …   4.7  2008     8 manu… 4         9    12 e     pick…
 5 jeep         grand che…   4.7  2008     8 auto… 4         9    12 e     suv  
 6 chevrolet    k1500 tah…   5.3  2008     8 auto… 4        11    14 e     suv  
 7 jeep         grand che…   6.1  2008     8 auto… 4        11    14 p     suv  
 8 chevrolet    c1500 sub…   5.3  2008     8 auto… r        11    15 e     suv  
 9 chevrolet    k1500 tah…   5.7  1999     8 auto… 4        11    15 r     suv  
10 dodge        dakota pi…   5.2  1999     8 auto… 4        11    15 r     pick…
# ℹ 224 more rows

コードの arrange(cty, hwy) は、まず cty(市街地燃費)でデータを昇順に並び替え、次に hwy(高速道路燃費)でさらに昇順に並び替えるという処理を行います。これは、cty の値が同じ場合に hwy の値によって順序を決定することを意味します。

結果として、市街地燃費が低い車から高い車へと整理され、同じ市街地燃費を持つ車両の中では高速道路燃費が低い車から高い車へとさらに並び替えられることになります。このようにデータを整理することで、燃費の性能を複数の角度から比較・分析するのに役立ちます。

mpg %>%
  arrange(-cty)
# A tibble: 234 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 volkswagen   new beetle   1.9  1999     4 manu… f        35    44 d     subc…
 2 volkswagen   jetta        1.9  1999     4 manu… f        33    44 d     comp…
 3 volkswagen   new beetle   1.9  1999     4 auto… f        29    41 d     subc…
 4 honda        civic        1.6  1999     4 manu… f        28    33 r     subc…
 5 toyota       corolla      1.8  2008     4 manu… f        28    37 r     comp…
 6 honda        civic        1.8  2008     4 manu… f        26    34 r     subc…
 7 toyota       corolla      1.8  1999     4 manu… f        26    35 r     comp…
 8 toyota       corolla      1.8  2008     4 auto… f        26    35 r     comp…
 9 honda        civic        1.6  1999     4 manu… f        25    32 r     subc…
10 honda        civic        1.8  2008     4 auto… f        25    36 r     subc…
# ℹ 224 more rows

コード中の arrange(-cty) は、cty(市街地燃費)の値に基づいてデータを降順に並び替えることを意味します。-cty という表記は、cty の値を逆順(大きいものから小さいものへ)にソートするためのものです。

この操作により、市街地燃費が高い車から低い車へとデータが整理されます。このように降順でデータを整理することで、燃費が良い車両を先に確認することができ、燃費性能が良い車両の分析や比較が容易になります。

mpg %>% 
  arrange(manufacturer)
# A tibble: 234 × 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
 2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
 3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
 4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
 5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
 6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
# ℹ 224 more rows

コード中の arrange(manufacturer) は、manufacturer(製造業者)列を基準にして、データをアルファベット順(辞書順)で昇順に並び替える操作を指定しています。これにより、製造業者名がアルファベット順に並んだ状態でデータセットが再構成されます。

この並び替えを行うことで、同じ製造業者の車両が連続して表示されるため、製造業者ごとのデータを容易に確認しやすくなります。このような処理は、データの概観や比較分析を行う際に特に有効です。

mpg %>% 
  arrange(desc(manufacturer))
# A tibble: 234 × 11
   manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class
   <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
 1 volkswagen   gti     2    1999     4 manual(m5) f        21    29 r     comp…
 2 volkswagen   gti     2    1999     4 auto(l4)   f        19    26 r     comp…
 3 volkswagen   gti     2    2008     4 manual(m6) f        21    29 p     comp…
 4 volkswagen   gti     2    2008     4 auto(s6)   f        22    29 p     comp…
 5 volkswagen   gti     2.8  1999     6 manual(m5) f        17    24 r     comp…
 6 volkswagen   jetta   1.9  1999     4 manual(m5) f        33    44 d     comp…
 7 volkswagen   jetta   2    1999     4 manual(m5) f        21    29 r     comp…
 8 volkswagen   jetta   2    1999     4 auto(l4)   f        19    26 r     comp…
 9 volkswagen   jetta   2    2008     4 auto(s6)   f        22    29 p     comp…
10 volkswagen   jetta   2    2008     4 manual(m6) f        21    29 p     comp…
# ℹ 224 more rows

コード中の arrange(desc(manufacturer)) では、desc() 関数を用いて manufacturer(製造業者)列を降順に並び替えるよう指定しています。desc() 関数は、指定された列のデータをアルファベット逆順(辞書の逆順)で整理するために使われます。

この操作により、製造業者名がアルファベットの逆順に沿ってデータセットが再構成され、例えば「volkswagen」や「toyota」などの製造業者名が後ろから前に向かって表示されるようになります。これによって、特定の製造業者を降順で確認しやすくなるため、データの分析や視覚化が容易になります。

select

mpg %>% 
  select(model)
# A tibble: 234 × 1
   model     
   <chr>     
 1 a4        
 2 a4        
 3 a4        
 4 a4        
 5 a4        
 6 a4        
 7 a4        
 8 a4 quattro
 9 a4 quattro
10 a4 quattro
# ℹ 224 more rows

コード中の select(model) は、mpg データセットの中から model(車のモデル名)という列のみを選択し、その列だけを含む新しいデータフレームを作成します。この操作により、他の列(例えば製造業者名や燃費など)は除外され、model 列のみが含まれたシンプルなデータセットが生成されます。

このような処理は、特定のデータ属性に焦点を当てた分析や、不要なデータを排除してデータセットを簡略化する際に有効です。

mpg %>% 
  select(model, trans)
# A tibble: 234 × 2
   model      trans     
   <chr>      <chr>     
 1 a4         auto(l5)  
 2 a4         manual(m5)
 3 a4         manual(m6)
 4 a4         auto(av)  
 5 a4         auto(l5)  
 6 a4         manual(m5)
 7 a4         auto(av)  
 8 a4 quattro manual(m5)
 9 a4 quattro auto(l5)  
10 a4 quattro manual(m6)
# ℹ 224 more rows

コード中の select(model, trans) は、mpg データセットの中から model(車のモデル名)列と trans(トランスミッションの種類)列のみを選択し、これら二つの列だけを含む新しいデータフレームを作成します。この操作により、他の列(例えば製造業者名や燃費など)は除外され、指定された modeltrans の列のみが含まれたシンプルなデータセットが生成されます。

この処理は、特定のデータ属性に集中して分析を行いたい場合や、データセットを特定の情報に限定して扱いやすくする際に役立ちます。

mpg %>%
  select(manufacturer:year)
# A tibble: 234 × 4
   manufacturer model      displ  year
   <chr>        <chr>      <dbl> <int>
 1 audi         a4           1.8  1999
 2 audi         a4           1.8  1999
 3 audi         a4           2    2008
 4 audi         a4           2    2008
 5 audi         a4           2.8  1999
 6 audi         a4           2.8  1999
 7 audi         a4           3.1  2008
 8 audi         a4 quattro   1.8  1999
 9 audi         a4 quattro   1.8  1999
10 audi         a4 quattro   2    2008
# ℹ 224 more rows

コード中の select(manufacturer:year) は、manufacturer 列から year 列までの間にあるすべての列を選択します。この表記法は、列名の範囲を指定する際に使用され、指定された開始列と終了列を含む、その間にあるすべての列を含む新しいデータフレームを作成します。

この操作は、データセットから連続する複数の列を簡単に選択し、データの一部分に焦点を当てた分析や視覚化を行いたい場合に非常に便利です。特に、連続する複数の属性が関連して分析されるべき場合に有効です。

mpg %>% 
  select(!manufacturer)
# A tibble: 234 × 10
   model      displ  year   cyl trans      drv     cty   hwy fl    class  
   <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
 1 a4           1.8  1999     4 auto(l5)   f        18    29 p     compact
 2 a4           1.8  1999     4 manual(m5) f        21    29 p     compact
 3 a4           2    2008     4 manual(m6) f        20    31 p     compact
 4 a4           2    2008     4 auto(av)   f        21    30 p     compact
 5 a4           2.8  1999     6 auto(l5)   f        16    26 p     compact
 6 a4           2.8  1999     6 manual(m5) f        18    26 p     compact
 7 a4           3.1  2008     6 auto(av)   f        18    27 p     compact
 8 a4 quattro   1.8  1999     4 manual(m5) 4        18    26 p     compact
 9 a4 quattro   1.8  1999     4 auto(l5)   4        16    25 p     compact
10 a4 quattro   2    2008     4 manual(m6) 4        20    28 p     compact
# ℹ 224 more rows

コード中の select(!manufacturer) は、manufacturer 列を除外することを指定しています。ここでの ! 演算子は否定を表し、つまり「manufacturer 列以外のすべての列を選択する」という意味になります。

この操作によって、manufacturer 列を含まない新しいデータフレームが生成されます。これは、特定の列が分析に不要である場合や、データセットのサイズを削減したいときに役立ちます。この方法を使用することで、関連しない情報を排除し、分析の焦点を絞ることが可能です。

mpg %>%
  select(MODEL = model, TRANS = trans)
# A tibble: 234 × 2
   MODEL      TRANS     
   <chr>      <chr>     
 1 a4         auto(l5)  
 2 a4         manual(m5)
 3 a4         manual(m6)
 4 a4         auto(av)  
 5 a4         auto(l5)  
 6 a4         manual(m5)
 7 a4         auto(av)  
 8 a4 quattro manual(m5)
 9 a4 quattro auto(l5)  
10 a4 quattro manual(m6)
# ℹ 224 more rows

コード中の select(MODEL = model, TRANS = trans) は、mpg データセットの model 列と trans 列を選択し、それぞれに MODELTRANS という新しい名前を割り当てます。これにより、元の列名をより説明的または分析しやすい名前に変更しています。

この操作は、データセットの列名を明確にし、報告や分析を行いやすくするために役立ちます。新しい名前が割り当てられることで、データの扱いや、プログラムコードの可読性が向上し、エラーの発生を減らす助けにもなります。また、データセットの列名を標準化する際にも使用されます。

mpg %>%
  rename(MODEL = model, TRANS = trans)
# A tibble: 234 × 11
   manufacturer MODEL      displ  year   cyl TRANS drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
 2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
 3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
 4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
 5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
 6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
# ℹ 224 more rows

コード中の rename(MODEL = model, TRANS = trans) は、mpg データセットの model 列の名前を MODEL に、trans 列の名前を TRANS に変更します。ここでの記法では、新しい名前が左側に、元の名前が右側に配置されており、それぞれの列名がどのように変更されるかを明示しています。

この操作によって、元のデータセットの列名が更新され、新しい名前で置き換えられます。列名を変更することで、データの説明がより明確になる場合や、分析を行いやすくするためによく行われます。特に、データセット内の列名が一般的ではないか、略語や技術的な用語を含む場合に、より理解しやすい名前に変更することが有効です。

mpg %>% 
  select(starts_with("c"))
# A tibble: 234 × 3
     cyl   cty class  
   <int> <int> <chr>  
 1     4    18 compact
 2     4    21 compact
 3     4    20 compact
 4     4    21 compact
 5     6    16 compact
 6     6    18 compact
 7     6    18 compact
 8     4    18 compact
 9     4    16 compact
10     4    20 compact
# ℹ 224 more rows

このコードは、mpg データセットから特定の命名パターンに基づいて列を選択するためのものです。使用されているのは dplyr パッケージの select 関数と、その中のヘルパー関数 starts_with() です。

コード中の select(starts_with("c")) は、列名が “c” で始まるすべての列を mpg データセットから選択します。たとえば、cty(市街地燃費)や cyl(シリンダー数)など、名前が “c” で始まる列が対象になります。

この操作によって、特定の接頭辞で始まる列のみを含む新しいデータフレームが作成されます。このような処理は、特定の命名規則に基づくデータ属性を効率的に抽出して分析したい場合に非常に便利です。

mpg %>%
  select(where(is.character))
# A tibble: 234 × 6
   manufacturer model      trans      drv   fl    class  
   <chr>        <chr>      <chr>      <chr> <chr> <chr>  
 1 audi         a4         auto(l5)   f     p     compact
 2 audi         a4         manual(m5) f     p     compact
 3 audi         a4         manual(m6) f     p     compact
 4 audi         a4         auto(av)   f     p     compact
 5 audi         a4         auto(l5)   f     p     compact
 6 audi         a4         manual(m5) f     p     compact
 7 audi         a4         auto(av)   f     p     compact
 8 audi         a4 quattro manual(m5) 4     p     compact
 9 audi         a4 quattro auto(l5)   4     p     compact
10 audi         a4 quattro manual(m6) 4     p     compact
# ℹ 224 more rows

このコードは、mpg データセットからデータ型が文字列(character)である列のみを選択するためのものです。使用されているのは dplyr パッケージの select 関数と、その中のヘルパー関数 where です。

コード中の select(where(is.character)) は、各列に is.character 関数を適用して、その結果が TRUE である列、つまりデータ型が文字列である列のみを選択します。where 関数は、条件に一致する列を動的に選択するために使われます。

この操作によって、データセットから文字列型のデータを含む列だけが抽出され、新しいデータフレームが作成されます。この方法は、データセット内の特定のデータ型に基づいて列をフィルタリングしたい場合に非常に有効です。特に、多様なデータ型が混在する大きなデータセットを扱う際に役立ちます。

mpg %>%
  select(where(~ is.character(.x) && n_distinct(.x) <= 6))
# A tibble: 234 × 2
   drv   fl   
   <chr> <chr>
 1 f     p    
 2 f     p    
 3 f     p    
 4 f     p    
 5 f     p    
 6 f     p    
 7 f     p    
 8 4     p    
 9 4     p    
10 4     p    
# ℹ 224 more rows

このコードは、dplyr パッケージを使用して mpg データセットから特定の条件を満たす列を選択するためのものです。特に、select(where(...)) の中で使われている ~ 記号と .x は、dplyr の関数式の中で非常に重要な役割を果たします。
~ 記号について

~ は式(formula)の開始を示す記号であり、R言語の dplyrtidyverse などの文脈でよく使われます。この記号の後に続くコードは、一つの単位として評価される式です。where 関数の中では、~ に続く式を使ってデータフレームの各列を評価し、特定の条件に基づいて列を選択するためのルールを定義します。
.x 変数について

.xwhere 関数内で使用される一時的なプレースホルダー(仮の変数)です。mpg データセットの各列がこの .x に順番に代入され、~ の後に続く条件式に基づいてその列が選択の対象となるかどうかが判断されます。つまり、.x は現在評価中の列のデータを表します。

コードの具体的な説明

select(where(~ is.character(.x) && n_distinct(.x) <= 6)) において、

  • is.character(.x).x (現在評価中の列)が文字列型かどうかを判定します。

  • n_distinct(.x) <= 6.x の中のユニークな値の数が6以下であるかを判定します。

この二つの条件が両方とも TRUE であれば、その列は選択されます。この式により、文字列型でカテゴリー数が少ない列、つまり管理しやすいカテゴリカルデータの列のみをデータセットから抽出することが可能になります。

この方法を使用することで、データセットから特定の特性を持つ列を効率的に選択し、データの整理や分析を容易にすることができます。

R言語における &&& はどちらも論理演算子であり、論理ANDの機能を持っていますが、その動作は異なります。

&(論理AND)

  • & はベクトル化された演算子であり、対応する要素同士の論理演算を行います。これは、入力されたベクトルの全ての要素に対して個別に論理AND演算を行うため、複数の論理値を含むベクトルを処理するのに適しています。

  • 例えば、c(TRUE, FALSE, TRUE) & c(TRUE, TRUE, FALSE) という式は c(TRUE, FALSE, FALSE) を返します。

&&(ショートサーキットAND)

  • && はショートサーキット論理演算子で、主に長さが1のベクトル(単一の論理値)に対して使用されます。この演算子は最初の要素のみを評価し、その結果によって次の評価の必要があるかどうかを決定します(ショートサーキット評価)。

  • 例えば、TRUE && FALSEFALSE を返しますが、c(TRUE, TRUE, TRUE) && c(TRUE, FALSE, TRUE) は最初の要素のみを評価して TRUE を返します。

使用例

  • &if 文内や単一の条件判断ではなく、データフレームやベクトルの要素ごとの条件を適用する場合に使用します。

  • && は条件式が複数あるが、最初の条件が FALSE の場合にはその時点で評価を停止するような場合に使われます。これは特に、処理効率を向上させたい場合や、後続の条件がエラーを引き起こす可能性がある時に有用です。

これらの違いを理解することは、特にデータのサブセット選択や条件付き処理を行う際に重要です。