2016-05-25 5 views
0

so ist meine Hauptdatenpassende Zeichen aus zwei Spalten von zwei verschiedenen Datenrahmen und beschriften

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 

ich auch diese andere Datenrahmen von Kontinenten wie gesammelt haben:

europe 
Albania 
Andorra 
Armenia 
Austria 
Azerbaijan 
Belarus 

oder ein anderes Datenrahmen wie

asia 
Afghanistan 
Bahrain 
Bangladesh 
    Bhutan 
    Brunei 

6 Burma (Myanmar)

Ich habe und sie dann beschriften mit den Kontinenten wie Europa oder Asien

Ich möchte mit den Kontinenten Ländern Datenrahmen, die Länder meiner Daten entsprechen

hier ist der Code ich es geschafft haben, sie aber nicht so passen die sonst wenn nur ausgeführt:

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") 

danke im voraus.

Antwort

0

Hier ist eine Methode mit ifelse. Ich veränderte Daten leicht, so dass Sie sehen können, dass es sowohl für Asien und Europa

# 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)) 

funktionieren wird es im Allgemeinen eine gute Idee ist, verschachtelte ifelse auf ein Minimum zu halten, aber für eine solche Datenmenge von ein paar tausend Beobachtung, Es wird in Ordnung sein.

+0

FWIW, sagte sie 'asia' und' Europe' data.frames waren, nicht Vektoren. – Frank

+1

Ja, ich hatte es ursprünglich so, aber änderte es für Ästhetik, wahrscheinlich besser, um es originalgetreuer zu halten. Vielen Dank. – lmo

+0

genau wie mein eigenes wenn sonst, wenn Betrieb es gerade NAAs zurückbringt ... – hanif

1

Zuerst baut die Karte von Ländern zu Kontinenten:

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

Dann verwenden 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> 

Im Allgemeinen sollten Sie in einer einzigen Struktur wie continent_map zugehörige Daten halten (statt vielen separate Orte wie die OP's asia und europe).


verwendet Daten:

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

genau wie jede andere Methode gibt es einfach NAs in der Kontinent-Spalte für alle Länder aus irgendeinem Grund !! Ich habe sogar sichergestellt, dass sie beide Klassencharakter sind, immer noch keine Übereinstimmung oder iselse gibt alles andere als NAs – hanif

+0

Wie lmo vorgeschlagen, versuchen Sie den Code in jeder unserer Antworten (einschließlich der Teil, in dem die Daten eingelesen), um Ihr Problem besser zu untersuchen. Diese Art von Problem (wo Sie und die Antwortenden unterschiedliche Ergebnisse haben, weil Ihre Beispieldaten nicht eindeutig sind) ist der Grund, warum es empfehlenswert ist, minimale reproduzierbare Beispiele zu veröffentlichen http://stackoverflow.com/a/28481250/ – Frank

Verwandte Themen