R データフレームをsubsetを用いてベクトルで絞り込む
やりたいこと
データフレームについて、ある特定の列について、複数の値のいずれかに一致するという条件で行の絞り込みを行ないたい。例えば、下記のようなデータフレームがあったとき、appleとorangeの行のみを抽出したい。
> #テストデータ > dat <- data.frame( item = c("apple", "orange", "apple", "orange", "grape", "grape", "apple"), locate = c("Osaka", "Osaka", "Kyoto", "Tokyo", "Tokyo", "Kyoto", "Tokyo"), price = c(100, 200, 120, 180, 200, 210, 140)) > #出力 > dat item locate price 1 apple Osaka 100 2 orange Osaka 200 3 apple Kyoto 120 4 orange Tokyo 180 5 grape Tokyo 200 6 grape Kyoto 210 7 apple Tokyo 140
下記のとおり、細々とOR条件を用いてsubsetを使う方法があるが、これだと要素が増えたときや、要素が可変となる時に対応が面倒。
dat_result <- subset(dat, dat$item=="orange" | dat$item=="apple") > dat_result item locate price 1 apple Osaka 100 2 orange Osaka 200 3 apple Kyoto 120 4 orange Tokyo 180 7 apple Tokyo 140
対応
ベクトルで絞り込むのがベスト。この場合、== でなく、%in% を使う。
※==の場合、ベクトルの最初の要素でしか絞り込まれないので注意。
items <- c("orange", "apple") dat_result <- subset(dat, dat$item %in% items) > dat_result item locate price 1 apple Osaka 100 2 orange Osaka 200 3 apple Kyoto 120 4 orange Tokyo 180 7 apple Tokyo 140
execute, conduct, carry out「実行する」に関する英単語の使い分け
現在とあるTOEIC対策の参考書を読み進めているんだけれど、
execute a plan [計画を実行する]
conduct a survey [アンケート調査を行う]
という例文が近くのページで紹介されていて、イマイチ違いが明確に記述されていなかったので調べてみた。
計画されたことを実行する
execute
(職務・計画・命令などを)実行する、執行する、処刑する。
execute a command [命令を実行する]
execute the murder [殺人犯を処刑する]
既に決められたこと、計画されていることを行うことに使うみたい。プログラムやスクリプトの(命令の)実行がexecuteだから、それと併せて覚えれば良さそう。
※プログラム実行はrunで表現することもあるけど、あまり大きな違いはないみたい。
先立って行う
conduct
(業務などを)行う、処理する、指揮する、案内する。
He conducted the party up the mountain. [彼は一行を導き山を登った]
conduct one's business affairs [業務を行う]
conduct an orchestra [オーケストラを指揮する]
executeが計画されたことに対して、conductは先立って動くことを表している。旅行を(旅行客に先立って)案内するツアーコンダクターはconductから来ている。
目的を成し遂げる
carry out
(目的などを)成し遂げる、遂行する。
carry out a mission. [任務を遂行する]
carried out a important project. [重要なプロジェクトを成し遂げた]
carry out a contract. [契約を履行する]
何か決まったことを行う意味では、executeに近いが、carry outは、より大きな事柄を達成・成し遂げたときに使う模様。
他にも、学生時代に「する」を表す動詞として教えられるdoが同類表現として挙げられるけど、上述3つが違いとしてややこしそうだった。必要に応じて更新予定。
R 合計がゼロになるデータフレームの列の削除
やりたいこと
データフレームを使っているとき、合計がゼロとなる不要な列が出てきた場合その列を除外したい。例えば、以下のようなデータがあったとき、合計がゼロとなるC列・E列を除外したい。
> #テストデータ > dat <- data.frame( A = seq(1, 10), B = seq(2, 20, 2), C = rep(0, 10), D = seq(3, 30, 3), E = rep(0, 10) ) > #出力 > dat A B C D E 1 1 2 0 3 0 2 2 4 0 6 0 3 3 6 0 9 0 4 4 8 0 12 0 5 5 10 0 15 0 6 6 12 0 18 0 7 7 14 0 21 0 8 8 16 0 24 0 9 9 18 0 27 0 10 10 20 0 30 0
対処方法
colSums() で弾いちゃえば良い。colSums() を使うとデータフレームの各列の合計を返してくれる。
> colSums(dat) A B C D E 55 110 0 165 0
これを活用して、データフレームの列を指定すればOK。
> dat[colSums(dat)!=0] A B D 1 1 2 3 2 2 4 6 3 3 6 9 4 4 8 12 5 5 10 15 6 6 12 18 7 7 14 21 8 8 16 24 9 9 18 27 10 10 20 30
feeやfareなど「料金」に関する英単語のカテゴリ分け
ブログを始めてみた
こんにちは。
ちょうどこの記事の投稿画面に
最初の記事を書いてみましょう
ブログ開設おめでとうございます。まずこんなテーマで、初めての記事を書いてみてはいかがでしょう?
と記述されているので、そのテーマに添って書いてみる。
このブログでこれから書いてみたいと思っていること。「今日印象に残ったこと」などテーマをはっきりさせるとブログが続きやすくなります
過去、何度かブログを運営したことがあったけれど、ひと目を気にしすぎてなかなか長続きしなかったので、見てもらうことを意識しすぎずアウトプットを続けていきたい。書きたいなと思っているのは、
- なかなか覚えられない英単語やイディオム(書くことで覚える)
- ITやテクノロジのTips・覚え書き(ブログで整理して後から読み返す)
- その他日々のこと
新しいブログを始めるにあたって、意気込みを一言!
あまり意気込みすぎると長続きしなくなるので、週2更新くらいで頑張りたい。