DOINGTHINGSRIGHT

DOING THINGS RIGHT

彩りのある生産的な日々を

【R】複数列で1セットになっているデータをtidyrで整然(縦長)にする~pivot_longerの.valueを学ぶ

「割とよく遭遇するものの、知らないと意外に苦戦するデータ」の整形Tipsです。pivot_longer()で値を複数列に入れたい時に使えます。
データは以下のようなもの。場面としては、「バーガー,サイドメニュー,ドリンクそれぞれ選べるセットメニューの注文レコード」を想定しています。

見てわかるように横長で気持ち悪いので整然データにしたいところですが、注文された「バーガーの種類と価格」「ポテトの種類と価格」「ドリンクの種類と価格」がそれぞれ2列で1セットになっているので、少し工夫が必要です。

data <- data.frame(number=c(1:3),
                   order_burger=c("cheese","fish","chicken"),price_burger=c(500,450,300),
                   order_side=c("potato","onion","potato"),price_side=c(100,150,100),
                   order_drink=c("ginger","orange","apple"),price_drink=c(100,120,120))
kable(data)
number order_burger price_burger order_side price_side order_drink price_drink
1 cheese 500 potato 100 ginger 100
2 fish 450 onion 150 orange 120
3 chicken 300 potato 100 apple 120

方法0:そのままやると…?

data %>%
  mutate_if(is.numeric, as.character) %>% ##そのままだとエラーが出るのでデータ型統一
  pivot_longer(-number, names_to = "setmenu", values_to = "order") %>% 
  kable()
number setmenu order
1 order_burger cheese
1 price_burger 500
1 order_side potato
1 price_side 100
1 order_drink ginger
1 price_drink 100
2 order_burger fish
2 price_burger 450
2 order_side onion
2 price_side 150
2 order_drink orange
2 price_drink 120
3 order_burger chicken
3 price_burger 300
3 order_side potato
3 price_side 100
3 order_drink apple
3 price_drink 120

違います!orderとpriceを別々の列にしたいんです!といってもR君はわかってくれません。

方法1:pivot_longe()の.valueを駆使

pivot_longer()names_toは複数の引数を取ることができ、さらに.valueという特殊な変数を渡すことで、セットになっている複数列をまとめることができます。実際に見てもらった方がわかりやすいでしょう。

以下のコードで、「"_"で切り分けた列名の前半部分(order,prise)を列名にした新たな列を作って値の格納先とし、後半部分(burger,side,drink)をsetmenuという列に格納せよ。」という指示になります。

data1<-data %>% pivot_longer(-number,names_to=c(".value","setmenu"),names_sep = "_")
kable(data1)
number setmenu order price
1 burger cheese 500
1 side potato 100
1 drink ginger 100
2 burger fish 450
2 side onion 150
2 drink orange 120
3 burger chicken 300
3 side potato 100
3 drink apple 120

求めていたのはこれだよ、これ。

方法2:unite()とseparate()を使う

.valueの使い方いまいちわかんねえ!」という人には少し冗長にはなりますがこんな方法もあります。

  • 手順1:unite()で一列にまとめる
    unite()は列指定の方法としてselect()と同じ方法が使えて便利です。
data2<-data %>%
  unite(col="burger",ends_with("burger")) %>% 
  unite(col="side",ends_with("side")) %>% 
  unite(col="drink",ends_with("drink"))
kable(data2)
number burger side drink
1 cheese_500 potato_100 ginger_100
2 fish_450 onion_150 orange_120
3 chicken_300 potato_100 apple_120
  • 手順2:pivot_longer()で縦長にする
    先ほどと違い、1列にまとめているので簡単です。
    names_toで列名を入れる列の名前を指定し、values_toで値を入れる列の名前を指定します。
data3<-data2 %>%
  pivot_longer(-number,names_to="setmenu",values_to="order_price")
kable(data3)
number setmenu order_price
1 burger cheese_500
1 side potato_100
1 drink ginger_100
2 burger fish_450
2 side onion_150
2 drink orange_120
3 burger chicken_300
3 side potato_100
3 drink apple_120
  • 手順3:separate()で戻す
data4<-data3 %>% 
  separate(col=order_price,into=c("order","price"))
kable(data4)
number setmenu order price
1 burger cheese 500
1 side potato 100
1 drink ginger 100
2 burger fish 450
2 side onion 150
2 drink orange 120
3 burger chicken 300
3 side potato 100
3 drink apple 120

まとめ

pivot_longer()をうまく使えばunite()separate()などを使わずに1つの関数で完結させることができます。Hadleyさんは本当に痒い所に手が届く人です…

【洋楽】ロック好きにおすすめのエレクトロニカ,シンセポップバンド7選

もともと音楽はロック専門だった自分。しかしそんな自分を電子音に目覚めさせたロックと親和性のある(?)エレクトロニカバンドを完全に独断と偏見で選んできました。

一口にエレクトロニカといっても多種多様なもの。そんな深淵世界にあなたもようこそ。

ケミカル・ブラザーズ(The Chemical Brothers)

まずは王道中の王道、ケミブラです。(特に初期の、)大胆なブレイクビーツを基調にした迫力のあるエレクトロサウンドはロックとの親和性も非常に高く、「今までロックしか聴いたことがない!」という人にもすんなり馴染む事間違いなしです。

ロックとエレクトロニカ、テクノのボーダーをブチ壊した代表作、Block Rockin' Beatsをお勧めしておきます。


The Chemical Brothers - Block Rockin' Beats (Official Music Video)

ルーズヴェルト(Roosevelt)

今度は趣向を変えてドイツのエレクトロポップバンドの紹介です。

「踊れるエレクトロポップ」と聞くと想像するのはEDMですが、彼らのアプローチは全く別物。80's風だけどモダンにチューニングされた極上シンセサウンドとリズム隊のグルーヴィーなバンドサウンドの融合により、上品なインディー・サイケを感じながらも体の芯から踊れてしまう、そんな中毒性の高い音楽になっています。


Roosevelt - Montreal (Official Video)

ポーティス・ヘッド

ポーティス・ヘッドはイギリスのエレクトロ・グループ。彼らの代表作Dummyはそのジャケットからもうひしひしと伝わってくるダークムードが特徴です。怪しげでロマンティックな雰囲気を漂わせながら、一方で本格的なヒップホップの様式美も楽しめる傑作です。

マッシブ・アタックやトリッキーなどと共にトリップ・ポップとしてカテゴライズされることも多く(本人達はそれを嫌っているようですが...)、陰鬱なUKロックが好きな方にはもってこいのバンドです。

Sour Times, a song by Portishead on Spotify

デペッシュ・モード

続いてはイギリスのエレクトロポップバンド、デペッシュ・モード

日本での知名度は比較的ないものの、2020年にロックの殿堂入りが決まるなど、欧米では絶大な人気を誇る超大物バンド。その音楽性はニューウェイブらしく、実験的かつスタイリッシュな電子音が特徴的です。古典とも呼ぶべき彼らの音楽は、現在のエレクトロニカを形作ったといっても過言ではありません。


Depeche Mode - Enjoy The Silence (Official Video)

フューチャー・アイランズ

アメリカのシンセポップバンド、フューチャー・アイランズ。私の個人的な趣味でランクインしました。

彼らの特徴は何といっても、なぜかノスタルジーを感じるサウンドとメロディーとボーカル。思わず心がキュッとなってしまいます。昔ながらのニューウェイブのメソッドを踏襲した曲が多いですが、非常に聴きやすく、「ニューオーダーはちょっと響かなかった...」という人にこそ聴いてほしいです。


Future Islands - Seasons (Waiting On You) (Official Video)

ホット・チップ

2000年にロンドンで結成されたエレクトロポップバンド、ホット・チップ、「重厚なアンサンブル」というよりは「ジャブをいろんな角度から何発も入れてくる」ような独特のサウンドが特徴です。

電子音だけに限らず彼らの用いるサンプリングの数は膨大で、せわしなさもあるものの整然としています。そこにボーカルの優し気な声が乗り、気付いたら曲の心地よさにどっぷりと浸かってしまっている。そんなバンドです。


Hot Chip - Over and Over (Official Video) (HD)

MGMT

アメリカのサイケデリックバンド、MGMT。インディーロックバンドとして語られることが多いのでリストに入れるか迷いましたが、電子音を多用したサイケサウンドエレクトロニカの文脈で見ても非常に高い評価を受けています。

全身を包み込むようなトリップ感に身を任せ、自由に体を揺らしてみる。そんな非日常にいざなうMGMTの音楽をぜひ聴いてみてください。

youtu.be

私を早起きにさせた必殺モーニングルーティン

おはようございます。6時半に起床して朝ごはんを食べながらこの記事を書いています(7時現在)。
毎日二度寝しては後悔を引きずりながら家を出ていた私を「朝に強い人」にさせたモーニングルーティンを紹介していきます。

早起きのためのルーティン三要素

「早起きの習慣をつけたい」というモチベーションでモーニングルーティンを作るなら、必要な要素が3つあります。

一つ目が「導入」、二つ目が「動機づけ」、三つ目が「定着」です。

続きを読む