2017-07-16 14 views
2

私は、認定された国で構成される変数を、私が指定している地域に再コードしようとしています。私はdplyrを使用して国の変数を地域にコード化するために複数のif_elseステートメントを実行しようとしましたが、途方に暮れています。150カントリーレコーディング以上の優れた方法はありますか?

私はiと一致df$countryの値を変更し、それを変更したいのですが、以下の例では、ベクター中でいくつかの国をループへ forループを使用して、新しい何かに値を変更したいです"Europe"。これは私が開発したコードであり、動作したくないようです。これを行うより良い方法はありますか?

df <- data.frame(country =c("Netherlands", "US", "Canada", "Frace", "Italy"), 
     ID=1:100) 
i <- c("Netherlands", "France", "Italy") 
n <- length(i) 

for (i in n){ 
df$country[(df$country == i)] <- "Europe" 
} 

フォーマットの変更方法によっていくつかのエラーが発生します。何も動かないようです。

答えて

2

「国」はfactorであるように、私たちは%in%「私は「ヨーロッパ」にされている代わりにforループ

levels(df$country)[levels(df$country) %in% i] <- "Europe" 
+0

を使用してのうわー、これは動作しているようです "国のlevelsを割り当てることができますかなり完璧。私が正しく理解していれば、コードは: 1. df $ countryのレベルを呼び出す。 2. iと一致する因子レベルを索引付けする。 3.一致を「ヨーロッパ」に変更します。 %%%パイプについて説明できますか?私はそれをオンラインで数回見ましたが、良い概観を見つけることができません。 – elliot

+0

@elliot一致する要素が複数ある場合、 '%in% 'を使用して論理ベクトルを返すことができます。 'level(df $ country)%in%i'は論理ベクトル、すなわちTRUE/FALSEを返し、その論理ベクトルに基づいて' levels(df $ country) 'をサブセット化し、これを 'Europe'に割り当てます。 – akrun

+1

私はこの問題を数ヶ月間克服しようとしてきました。お大事に。 – elliot

関連する問題