3

国固有のデータに取り組んでいます。国を事前定義された国グループに割り当ててグループ化する必要があります。以下のようにコードを書きました。NON-CORE グループへの割り当てのセクションに、新しい国がデータベースに入るたびに入力しないことで、より効率的なスクリプト作成方法があるかどうかを知りたいですか? それ以外の場合のように聞こえます。しかし、それをコーディングする方法がわかりません。

library(data.table)
data<- data.table(data)
setkey(data,Region.Group)
data[list(c(
  "Australia",
  "Bangladesh",
  "Cambodia",
  "Estonia",
  "Finland",
  "France",
  "India",
  "Indonesia",
  "Korea",
  "Lithuania",
  "Malaysia",
  "Middle East",
  "Norway",
  "Philippines",
  "Poland",
  "Russia",
  "Spain",
  "Sri Lanka",
  "Sweden",
  "Switzerland",
  "TAT Region",
  "Thailand",
  "Ukraine",
  "Vietnam",
  "New Zealand",
  "Israel",
  "Myanmar",
  "Pakistan",
  "Portugal",
  "Turkey",
  "Portugal")), Core:="NON-CORE"]
data[list(c(
  "Belgium",
  "Netherlands")), Core:="Benelux"]
data[list(c(
  "China Group")), Core:="China"]
data[list(c(
  "Germany")), Core:="Germany"]
data[list(c(
  "Hong Kong Group")), Core:="Hong Kong"]
data[list(c(
  "Italy")), Core:="Italy"]
data[list(c(
  "Japan")), Core:="Japan"]
data[list(c(
  "North America Central",
  "North America East",
  "North America North",
  "North America South",
  "North America West")), Core:="N.America"]
data[list(c(
  "Singapore")), Core:="Singapore"]
data[list(c(
  "Taiwan")), Core:="Taiwan"]
data[list(c(
  "United Kingdom")), Core:="UK"]
4

1 に答える 1

2

ある時点で国を正しいグループに入れる必要があると思います。わざわざ非中核国を入れないリスト (ここで短縮) はどうですか:

coregroup <- list(
    Benelux     =   c("Belgium","Netherlands"),
    Germany     =   "Germany"
)

data.table次に、このリストから作成できます

dt_coregroup <- data.table(
    Core=rep(names(coregroup),lapply(coregroup,length)),
    Region.Group=unlist(coregroup)
)
#       Core Region.Group
# 1: Benelux      Belgium
# 2: Benelux  Netherlands
# 3: Germany      Germany

元のデータにマージします。どうやら「データ」はすでにR関数であるため、意味のないデータを入れて「dt_start」に名前を変更しました。

dt_start <- data.table(Region.Group=c("Germany","Belgium","Australia"),Period=rep("2013Q1",3),Qty1=1:3)
setkey(dt_start,Region.Group)
setkey(dt_coregroup,Region.Group)

dt_new <- dt_coregroup[dt_start]
#    Region.Group    Core Period Qty1
# 1:    Australia      NA 2013Q1    3
# 2:      Belgium Benelux 2013Q1    2
# 3:      Germany Germany 2013Q1    1

最後に、最後のステップで、グループ化されていない国を NON-CORE に割り当てます。

dt_new[is.na(Core),Core:="NON-CORE"]
#    Region.Group     Core Period Qty1
# 1:    Australia NON-CORE 2013Q1    3
# 2:      Belgium  Benelux 2013Q1    2
# 3:      Germany  Germany 2013Q1    1
于 2013-05-18T03:29:56.520 に答える