0
  Date     City     Temp
  1/1/2012 Liverpool  10
  1/2/2012 Madrid     20
  1/3/2012 Milan      40
  1/4/2012 Istanbul   35
  1/5/2012 Munich      10

このデータ セットに郡の列名を含む別の列を追加する必要があります。df$City がマドリッドの場合、Country はスペインである必要があります。私は今、これは非常に小さなデータセットです.プログラムで薄いRを実行できるようにする必要がありますか?

新しいデータ フレームを次のようにしたいと思います。

Date     City        Temp   Country
--------------------------------------
1/1/2012 Liverpool    10    England
1/2/2012 Madrid       20    Matrid
1/3/2012 Milan        40    Italy
1/4/2012 Istanbul     35    Turkey
1/5/2012 Munich       10    Germany

Rでこれを行う方法はありますか?

4

2 に答える 2

2

提供された正確なデータは次のとおりです。

 df <- read.table(text= " Date     City     Temp
                 1/1/2012 Liverpool  10
                 1/2/2012 Madrid     20
                 1/3/2012 Milan      40
                 1/4/2012 Istanbul   35
                  1/5/2012 Munich      10",header=TRUE)


df$Country <- ifelse(df$City == "Liverpool", "England",
                     ifelse(df$City == "Madrid", "Spain",
                         ifelse(df$City == "Milan", "Italy",
                           ifelse(df$City == "Istanbul", "Turkey", "Germany") )))

ただし、より多くの都市と国があると想定しています。その場合は次のようになります。

countrydf <- read.table(text= " City Country
                           Liverpool  England
                           Madrid     Spain
                           Milan      Italy
                           Istanbul   Turkey
                           Munich     Germany",header=TRUE,stringsAsFactors=FALSE)


merge(df,countrydf, by="City")

ノート:

mapsあなたに役立つかもしれないパッケージを見ていた

library(maps)
data(world.cities)
head(world.cities)

world.cities[world.cities$name == "Istanbul" ,]
于 2013-01-17T16:33:24.833 に答える
0

あなたの状況で都市がどのように国にマッピングされているかを知らなければ (つまり、それらはlistvectordata.frame、またはまったく別の場所にマッピングされていますか?)、正しい答えが何であるかを推測するのは困難です。これは、都市と国のマッピングがリストにある 1 つの方法です。

df <- read.table(text="Date     City     Temp
1/1/2012 Liverpool  10
1/2/2012 Madrid     20
1/3/2012 Milan      40
1/4/2012 Istanbul   35
1/5/2012 Munich      10", header=TRUE)

city.countries <- list(England=c('Liverpool', 'London'), 
                       Spain='Madrid', 
                       Italy='Milan', 
                       Turkey='Istanbul', 
                       Germany='Munich')

df <- transform(df, Country = with(stack(city.countries), ind[match(City, values)]))
#       Date      City Temp Country
# 1 1/1/2012 Liverpool   10 England
# 2 1/2/2012    Madrid   20   Spain
# 3 1/3/2012     Milan   40   Italy
# 4 1/4/2012  Istanbul   35  Turkey
# 5 1/5/2012    Munich   10 Germany
于 2013-01-17T17:42:58.577 に答える