2017-08-15 22 views
0

次は、今、私は1つの関数にすべての個々の値を変更したいが、私はこれだけを考えることができますデータフレーム内で複数の文字列値の変更をチェーンする方法は?

編集変数名

forces2015 <- data.frame(Country = c("Russian Federation", "Egypt, Arab Rep.", "Iran, Islamic Rep.")) 

私のデータフレームの場合:

編集列名:

forces2015$Country <- gsub("Russian Federation", "Russia", forces2015$Country) 
forces2015$Country <- gsub("Egypt, Arab Rep.", "Egypt", forces2015$Country) 
forces2015$Country <- gsub("Iran, Islamic Rep.", "Iran", forces2015$Country) 

私はこれらの値のうち10個を持っている可能性があるので、これをどのように最もエレガントな方法で解決できますか?

+0

'stringr :: str_replace_all()'あなたが構築することができます – Masoud

+0

を一方を他方にマッピングし、それを使用して所望の値を記入するルックアップテーブル。 – lmo

+0

CountryフィールドはCountryまたはCountry.Nameですか? –

答えて

3

次のようにあなたはdplyrパッケージからrecodeを使用することができます。

forces2015$Country <- recode(forces2015$Country, "Russian Federation" = "Russia", "Egypt, Arab Rep." = "Egypt", "Iran, Islamic Rep." = "Iran") 
+0

良いことに、再コードについて知りませんでした。 –

+0

ええ、ありがとう。しかし、知っておきたいことがあります。 – Tdebeus

+0

私は 'recode()'について知らなかった。素晴らしい答え! –

0

この方法では、データフレームを関連する行にフィルターし、国の値をすばやく置き換えます。あなたが唯一の基本ライブラリ関数を使用している間、多くの条件を使用して多くの値を置き換えたい場合は、私はifelse()一連の機能を使用することをお勧めし data$Country[data$Country=="Russian Federation"] <- "Russia"

:単一交換のためのこの良い

forces2015$Country <- with(forces2015, 
        ifelse(Country=="Russian Federation","Russia", 
         ifelse(Country=="Egypt, Arab Rep.","Egypt", 
         ifelse(Country=="Iran, Islamic Rep.","Iran", 
          Country)))) 
1

あなたが試すことができますqdapパッケージ

c1 <- c('Russian Federation', 'Egypt, Arab Rep.', 'Iran, Islamic Rep.') 
c2 <- c('Russia', 'Egypt', 'Iran') 

library(qdap)  
mgsub(c1,c2, forces2015$Country.Name) 
1

使用dplyr :: case_when ...

library(dplyr) 

forces2015 %>% 
    mutate(Country = case_when(
    Country == "Russian Federation" ~ "Russia", 
    Country == "Egypt, Arab Rep." ~ "Egypt", 
    Country == "Iran, Islamic Rep." ~ "Iran", 
    TRUE ~ Country)) 
+0

ありがとうございます!あなたのコードは私の質問から編集したもの(あなたが答えた後に編集されたもの)をコピーすると少し違って見えます。 – Tdebeus

関連する問題