2

列が次のように構成されている次のデータセットがあるとします。

df1 = data.frame(Date=c(rnorm(5)),  
                 "United States) New York (NY" = c(rnorm(5)), 
                 "United States) Chicago (Illinois" = c(rnorm(5)),
                 "United States) Denver (Colorado" = c(rnorm(5)),
                 "United States) Seattle (Washington" = c(rnorm(5)),
                 "United States) Minneapolis (Minnesota" = c(rnorm(5)), check.names=FALSE)
df1

df2 = data.frame(Date=c(rnorm(5)),
                 "New York (New York, United States)" = c(rnorm(5)),
                 "Phoenix (Arizona, United States)" = c(rnorm(5)),
                 "Chicago (Illinois, United States)" = c(rnorm(5)),
                 "Los Angeles (California, United States)" = c(rnorm(5)), check.names=FALSE)
df2

ご覧のとおり、各列は都市を表すことを意図していますが、列名の構造は扱いにくいものになっています。列名の文字列から都市名を抽出する方法を誰かが教えてくれるかどうか疑問に思っていました。

各都市の辞書を持っていて、文字列の照合を行うこともできましたが、うまくいきませんでした。また、str_split を使用してこれを行う方法があると想定しましたが、まだわかりません。

sapply(str_split(names(df1),")"), 2)

もちろん、gsub による解決策もあると思いますが、正規表現に関しては私は少し苦手です。

最終的には、実際の都市名を列名として表示したいだけです。

New York, Chicago, Denver, Seattle, Minneapolis
4

1 に答える 1

3

使用できますgsub。最初のデータ フレームでこれを試してください

gsub(".*[)] (.*) [(].*", "\\1", names(df1)[-1])
# [1] "New York"    "Chicago"     "Denver"      "Seattle"     "Minneapolis"

2 番目のデータ フレームでは、最初の正規表現を少し調整するだけで機能します。

gsub("(.*) [(].*", "\\1", names(df2)[-1])
# [1] "New York"    "Phoenix"     "Chicago"     "Los Angeles"

両方の名前のセットに対して、これら 2 つを 1 つに結合します。

nms <- c(names(df1)[-1], names(df2)[-1])
gsub("(.*[)] |)(.*) [(].*", "\\2", nms)
# [1] "New York"    "Chicago"     "Denver"      "Seattle"     "Minneapolis"
# [6] "New York"    "Phoenix"     "Chicago"     "Los Angeles"
于 2014-10-27T23:38:13.893 に答える