2016-06-01 18 views
0

2つの値(文字列)が同じであるかどうかを調べたいRの種類の 'if'文を実行しようとしています異なる列。たとえば、OriginとDestinationの国が同じ場合、結果としてDomesticを使用して新しい列を作成したいとします。偽であれば、結局NAを国際的なものとしてコード化します。文字列の値が等しい場合に一致する、新しい列に新しい文字列値を作成するR

私はRでいくつかの機能を試していますが、それでも正しく設定できません。

私は車のライブラリからのrecode機能が収まると思います。データの例と、私が試したコード行の2つの例を示します。 助けてくれてありがとう。

#Data 
Origin.Country <- c("Canada","Vietnam","Maldives", "Indonesia", "Spain",  "Canada","Vietnam") 
Passengers <- c(100, 5000, 200, 10000, 200, 20, 4000) 
Destination.Country <- c("France","Vietnam","Portugal", "Thailand", "Spain", "Canada","Thailand") 

data2<-data.frame(Origin.Country, Destination.Country, Passengers) 

#Creating new column 
data2$Domestic<-NA 

#If Origin and Destination is the same = Domestic 
data2$Domestic[data2$Origin.Country==data2$Destination.Country <- Domestic 

data2$Domestic <- recode(data2$Origin.Country, c(data2$Destination.Country)='Domestic', else='International') 
+0

'Cを( 'のInt \' l」の、 '' 国内)[(Origin.Country == Destination.Country)+ 1L]' – rawr

答えて

0

それはベクトル化いないので、これは少し遅いかもしれませんが、それはあなたの例に基づいて働いていた:

data2$domestic <- apply(data2, 1, function(x) { 
    (x["Origin.Country"] == x["Destination.Country"]) 
}) 
+0

私が提供した例で試してみると、(結果としてtrueとfalseで)動作します。しかし、私は非常に大規模なデータセットを扱っており、動作しません。結果は表示されません.. –

+0

エラーが発生しますか?列の名前はあなたの例と同じですか? – Jasper

1

あなたが使用することができifelse:私は強制するas.characterを使用

data2$Domestic <- ifelse(as.character(data2$Origin.Country) == 
         as.character(data2$Destination.Country), 
         'Domestic', 'International') 

国名変数は比較のための文字になります。 ifelseは、最初の引数として論理をとり、TRUEの場合は2番目の引数を返し、FALSEの場合は3番目の引数を返します。この例では、変数を行ごとに比較します。

+0

素晴らしい!私の大きなデータセットでもうまくいきました。 @Imoありがとうございました。 –

0

あなたはこの方法でrecodeを使用することができます。

私が持っている
library(dplyr); library(car) 
data2 %>% mutate(Domestic = recode(as.character(Origin.Country) == as.character(Destination.Country), 
            "TRUE='domestic'; else='international'")) 

    Origin.Country Destination.Country Passengers  Domestic 
1   Canada    France  100 international 
2  Vietnam    Vietnam  5000  domestic 
3  Maldives   Portugal  200 international 
4  Indonesia   Thailand  10000 international 
5   Spain    Spain  200  domestic 
6   Canada    Canada   20  domestic 
7  Vietnam   Thailand  4000 international 
+0

すごく、ありがとう、問題解決! –

関連する問題