2016-12-09 9 views
2

「魚」と呼ばれるデータフレームがあります。特定の文字で始まる値をNA(R)に変更する方法

データフレームには3つの異なる変数があります。変数の1つは「種」と呼ばれます。

文字Mで始まるいくつかの種があります。文字Mで始まる種のすべての値を失う(NA)代わりに変更したいと思います。

種名全体を扱っているときにNAに変更する方法はわかっていますが、文字Mで始まる種についてはどうしますか?

fish$species[fish$species=="^M_"] <- NA 

をしかし、これは動作しません:

私はこれを試してみました。誰も助けることができますか?

+0

パターンの一致をテストするには、 '=='ではなく 'grepl'関数が必要です。 – Frank

+0

ありがとう、私はgsubとgrepを使用してそこにものを見てきました。しかし、コードを教えてもらえますか?私は文字通り==を "grep1"に置き換えていますか? – newtoallthis

+0

ああ、私はRが 'startsWith'関数を(下記の答えで)追加したのを忘れましたが、greplの使用は'?grepl'の文書でカバーされています。一般的に 'x [grepl(patt、x)] < - y'のようなことをします。 Rの複数の索引付け方法(Rイントロチュートリアルで扱う論理番号または位置番号による)のおかげで、 'grep'もここで使用できます。 – Frank

答えて

5

交換機能is.na<-()startsWith()を使用できます。

is.na(fish$species) <- startsWith(fish$species, "M") 

Rのドキュメントhelp(startsWith)によると、

startsWith()はと同等けどprefixは、正規表現の特殊文字を含めることではないgrepl("^<prefix>", x)、よりもはるかに高速です。

上記のコードは文字列を前提としています。因子列については、適切なレベルを変更することができます。

is.na(levels(fish$species)) <- startsWith(levels(fish$species), "M") 

もう一つの方法は、右手側の交換のためNAを使用して、levels<-()に置き換えることであろう。

levels(fish$species)[startsWith(levels(fish$species), "M")] <- NA 

あなたがしたい場合、あなたは間違いなくgrepl()を使用することができますが、この質問は新しいstartsWith()機能の良い使用例のように思えます。

これらのすべてがirisデータセットで正常にテストされたことにも注意してください。

+0

それは働いた、それは働いた!!!!!!!だから、これを行うには、変数を因子から文字に変更しなければなりませんでした。それは大きな問題ではありませんが、それを要素として維持する方法はありますか?それは、私が要素として残すと私にエラー(文字以外のオブジェクト)を与えます。 – newtoallthis

+1

is.na(fish $種)< - startsWith(as.character(fish $種)、 "M") 'で実行できるはずです。これは、ベクトルを文字に変更しません。 –

+0

@newtoallthis - 私はそれにも気づいた。編集を行いました。 –

関連する問題