LoginSignup
3
4

More than 5 years have passed since last update.

R言語でdata.frameの加工(transform ifelse grepl)

Last updated at Posted at 2013-12-15

試行錯誤中なのでひどいやりかたをしている可能性はあるので指摘歓迎.

read.csvしてきたdata.frameに対して,加工をいろいろやっている.どうやら文字列操作は素のままではあまり得意じゃないらしいことはわかってきた.文字列比較のための演算子は用意されておらず,grep とか gsub とかを使ってなんとかするっぽい.

適当なdata.frameについて,加工したものを新しいdata.frameに入れるのがセオリーっぽい.ということは,ある条件を満たす場合にフィールドに値を入れて追加するのならこんな感じか.

(transform(iris,ifsetos=ifelse(grepl("setos",Species),"yes", "NA")))

iris の Species で setos で部分文字列マッチ(grepl)したものについて,ifsetos という新たに追加したフィールド(transformによって)に"yes"を追加.マッチしない(elsifで)場合は"NA"を入れておく.

はまりポイント

  • grep 使うと真偽値じゃないものが返ってしまうらしく期待した動作にならずはまった.
  • Char型ではなくFactor型になってしまうとelseで元の文字列を返したつもりが数字になってはまる.
  • read.csv("hog.csv",as.is=T)
  • hoge$hoge <- as.character(hoge$hoge)

多分もっとエレガントな方法はあると思うんだけど,とりあえず.

3
4
0

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
3
4