95  select()の練習問題

library(tidyverse)

この練習問題では、data/select.xlsxのファイルを利用します。

課題1:

data/select.xlsxファイルを読み込んでください。

解答1:

エクセルファイルなので、tidyverseに追加して、readxlパッケージも読み込んでおきましょう。

library(tidyverse)
library(readxl)

dat <- read_excel("data/select.xlsx")
dat
# A tibble: 1 × 1
  `このデータは健康診断データ(の列名だけを適当に作成したもの)です`        
  <chr>                                                                     
1 ここを読み込んでしまった場合は、シート名の設定をやりなおしてみてください。

申し訳ありません。罠を仕掛けてみました。 エクセルファイルは、ファイルの中に、シー構造があるので、一番最初のシートが目とするデータでない場合は、読み込むシートを指定しあげる必要があります。 なので、正しいスクリプトは、

dat <- read_excel("data/select.xlsx", sheet="data")
dat
# A tibble: 1 × 30
     id   sex   age marrital_status occu_status pregnancy_status smoking_status
  <dbl> <dbl> <dbl>           <dbl>       <dbl>            <dbl>          <dbl>
1     1     2     3               4           5                6              7
# ℹ 23 more variables: smoking_years <dbl>, smoking_number <dbl>,
#   alcohol_status <dbl>, alcohol_frequency <dbl>, alcohol_volume <dbl>,
#   kensa_ldl <dbl>, kensa_tg <dbl>, kensa_ast <dbl>,
#   kensa_altkensa_glucose <dbl>, urine_glucose <dbl>, urine_protein <dbl>,
#   q1 <dbl>, q2 <dbl>, q3 <dbl>, q4 <dbl>, q5 <dbl>, ecg1 <dbl>, ecg2 <dbl>,
#   ecg3 <dbl>, chest_xp1 <dbl>, chest_xp2 <dbl>, chest_xp3 <dbl>,
#   address <dbl>

となります。 コラム名が多数ありますが、tibbleだと、このよう1画面で全部の名前の確認が可能です。

また、

colnames(dat)
 [1] "id"                     "sex"                    "age"                   
 [4] "marrital_status"        "occu_status"            "pregnancy_status"      
 [7] "smoking_status"         "smoking_years"          "smoking_number"        
[10] "alcohol_status"         "alcohol_frequency"      "alcohol_volume"        
[13] "kensa_ldl"              "kensa_tg"               "kensa_ast"             
[16] "kensa_altkensa_glucose" "urine_glucose"          "urine_protein"         
[19] "q1"                     "q2"                     "q3"                    
[22] "q4"                     "q5"                     "ecg1"                  
[25] "ecg2"                   "ecg3"                   "chest_xp1"             
[28] "chest_xp2"              "chest_xp3"              "address"               

としてあげることで、コラム名をベクトルとしとりだすこともできるので、合わせて覚えおいてもよいかもしれません。

課題2: 最後のコラム、addressを、id,sex,ageの後 に移動させてください。

解答2:

これはeverything()を使ってあげる必要があります

dat2 <- dat %>% 
  select(id,sex,age, address, everything())

あるいは、

dat2 <- dat %>% 
  select(id:age, address, everything())

課題3:

id,sex,age,addressと喫煙に関するsmoking_, 飲酒に関するalcohol_ではじまる変数を選択してください

解答3:

dat3 <- dat2 %>% 
  select(id:address, 
         starts_with("smoking_"), 
         starts_with("alcohol_"))
dat3
# A tibble: 1 × 10
     id   sex   age address smoking_status smoking_years smoking_number
  <dbl> <dbl> <dbl>   <dbl>          <dbl>         <dbl>          <dbl>
1     1     2     3      30              7             8              9
# ℹ 3 more variables: alcohol_status <dbl>, alcohol_frequency <dbl>,
#   alcohol_volume <dbl>

課題4: idからaddressまでと、statusで終わる列を取得してください。ただし、smokingとalcoholで始まるものを除外してください。

解答4:

dat4 <- dat2 %>% 
  select(id:address, ends_with("_status")) %>% 
  select(!c(alcohol_status,smoking_status))
dat4
# A tibble: 1 × 7
     id   sex   age address marrital_status occu_status pregnancy_status
  <dbl> <dbl> <dbl>   <dbl>           <dbl>       <dbl>            <dbl>
1     1     2     3      30               4           5                6

以上、select関数、慣れましたか?ここまでで、基本的な列の操作についての解説は終了です。次は行の操作にはいりたいのですが、そのまえに、基本事項を理解いただく必要がありますので、その解説をさせてください。