0

data.frameがあります

df <- data.frame(Equip = c(1,1,1,1,1,2,2,2,2,2),
                 Notif = c(1,1,1,5,5,3,3,3,3,4),
                 Component = c("1","1","1","2","2","1","2","2","2","3"))

Notif列が列に分類された場所Component(関連性がない可能性があるため、その列を作成する方法については説明しません)。

Notifこれで、値を対応するカテゴリにマップするテーブルができました。

 example <- 1 "repair" ; 3 "service" ; 4 "other" ; 5 "service"   

Categoryベクトルを作成してdata.frameに追加するにはどうすればよいですか?

4

1 に答える 1

2

1 つの方法は、次へのマッピングNotifに名前付きベクターを使用することCategoryです。

categories <- c(`1` = "repair", `3` = "service", `4` = "other",  `5` = "service")

次に、次のことができます。

df$Category <- categories[as.character(df$Notif)]

または同等に

df <- transform(df, Category = categories[as.character(Notif)])

どちらの場合も、出力は次のようになります。

df
#    Equip Notif Component Category
# 1      1     1         1   repair
# 2      1     1         1   repair
# 3      1     1         1   repair
# 4      1     5         2  service
# 5      1     5         2  service
# 6      2     3         1  service
# 7      2     3         2  service
# 8      2     3         2  service
# 9      2     3         2  service
# 10     2     4         3    other

別のアプローチは、データベース結合のように、data.frames をマージすることです。

categories <- data.frame(Notif = c(1, 3, 4, 5),
                         Category = c("repair", "service", "other", "service"))

merge(df, categories, by = "Notif", all.x = TRUE)
#    Notif Equip Component Category
# 1      1     1         1   repair
# 2      1     1         1   repair
# 3      1     1         1   repair
# 4      3     2         1  service
# 5      3     2         2  service
# 6      3     2         2  service
# 7      3     2         2  service
# 8      4     2         3    other
# 9      5     1         2  service
# 10     5     1         2  service

出力が並べ替えられていることに注意しNotifてください。これは、問題になる場合とそうでない場合があります。Notifこのアプローチは、 のような複数の変数にマップする場合に特に役立ちますCategory

于 2013-01-08T11:45:31.790 に答える