2016-05-25 16 views
0

にラベルを付けるので、これは私のような大陸のこれらの他のデータフレームも収集してきた私のメインデータマッチング文字とそれらに

Country Consumption Rank 
Belarus  17.5 1 
Moldova  16.8 2 
Lithuania  15.4 3 
    Russia  15.1 4 
Romania  14.4 5 
Ukraine  13.9 6 

です:

europe 
Albania 
Andorra 
Armenia 
Austria 
Azerbaijan 
Belarus 

または別の

asia 
Afghanistan 
Bahrain 
Bangladesh 
    Bhutan 
    Brunei 

6ビルマなどのデータフレーム

私は私が持っている大陸の諸国のデータフレームに私のデータの国々が一致して、ここではヨーロッパやアジア

のような大陸でそれらをラベル付けしたい

は、私が管理しているコードですが、そのほかのそれらを一致していません実行している場合:

if (data$Country %in% europe$europe) { 
data$con<-c("Europe") 
} else if (data$Country %in% asia$asia) { 
data$con<-c("asia") 
} else if (data$Country %in% africa$africa) { 
data$con<-c("africa") 
    } else 
    data$con<-c("ridi") 

ありがとうございます。

答えて

0

ifelseを使用する1つの方法です。私は、あなたはそれがアジアとヨーロッパ

# get your data 
df <- read.table(text="Country Consumption Rank 
Belarus  17.5 1 
        Brunei  16.8 2 
        Lithuania  15.4 3 
        Austria  15.1 4 
        Romania  14.4 5 
        Ukraine  13.9 6 
        Bangladesh  24.2 5", header=T) 

df.europe <- read.table(text=" europe 
Albania 
          Andorra 
          Armenia 
          Austria 
          Azerbaijan 
          Belarus", header=T, as.is=T) 

df.asia <- read.table(text="asia 
Afghanistan 
        Bahrain 
        Bangladesh 
        Bhutan 
        Brunei", header=T, as.is=T) 

# use ifelse to get categories 
df$con <- ifelse(df$Country %in% df.europe$europe, "europe", 
       ifelse(df$Country %in% df.asia$asia, "asia", NA)) 

一般的に最小限にネストされたifelseを維持することをお勧めします両方のために働くことを見ることができ、わずかので、あなたのデータを変更しますが、数千人の観察のようにデータセットの大丈夫だよ。

+0

FWIWは、彼らが 'asia'と' europe'がdata.frames、ないベクトルと述べました。 – Frank

+1

ええ、元々気に入っていましたが、それを美学のために変更しました。恐らく元のものよりも真実を保つ方が良いでしょう。ありがとう。 – lmo

+0

私の場合と同じように動作しますが、それは単にNAsを返します。 – hanif

1

まず、国から大陸へのマップを構築:

continent_map = stack(c(europe, asia)) 
names(continent_map) <- c("Country", "Continent") 

を次に、matchを使用します。

dat["Continent"] = continent_map$Continent[ match(dat$Country, continent_map$Country) ] 

    Country Consumption Rank Continent 
1 Belarus  17.5 1 europe 
2 Moldova  16.8 2  <NA> 
3 Lithuania  15.4 3  <NA> 
4 Russia  15.1 4  <NA> 
5 Romania  14.4 5  <NA> 
6 Ukraine  13.9 6  <NA> 

一般的に、あなたの代わりに、多くの(continent_mapのような単一の構造に関連するデータを維持する必要がありますOPのasiaeuropeのような別の場所)。使用


データ:

dat = structure(list(Country = c("Belarus", "Moldova", "Lithuania", 
"Russia", "Romania", "Ukraine"), Consumption = c(17.5, 16.8, 
15.4, 15.1, 14.4, 13.9), Rank = 1:6), .Names = c("Country", "Consumption", 
"Rank"), row.names = c(NA, -6L), class = "data.frame") 
europe = structure(list(europe = c("Albania", "Andorra", "Armenia", "Austria", 
"Azerbaijan", "Belarus")), .Names = "europe", row.names = c(NA, 
-6L), class = "data.frame") 
asia = structure(list(asia = c("Afghanistan", "Bahrain", "Bangladesh", 
"Bhutan", "Brunei")), .Names = "asia", row.names = c(NA, -5L), class = "data.frame") 
+0

ちょうど他の方法のように、何らかの理由ですべての国の大陸の列でNAを返します!どちらもクラス文字であることを確認しましたが、まだ一致していないか、ifelseはNAs以外のものを返します。 – hanif

+0

lmoが示唆しているように、問題をより詳しく調べるために、私たちの回答ごとにコードを実行してください。この種の問題(サンプルデータがあいまいであるため、あなたと回答者が異なる結果を示す)は、最小限の再現可能な例を投稿することをお勧めします。http://stackoverflow.com/a/28481250/ – Frank

関連する問題