web-dev-qa-db-ja.com

「整然とした方法で」列の名前を変数名に変更する方法

簡単なデータフレームを作成しました(以下のdput)。

    date      ticker     value
------------------------------
  2016-06-30  A2M.ASX   0.0686
  2016-07-29  A2M.ASX  -0.0134
  2016-08-31  A2M.ASX  -0.0650
  2016-09-30  A2M.ASX   0.0145
  2016-10-31  A2M.ASX   0.3600
  2016-11-30  A2M.ASX  -0.1429

value列の名前をmetric変数名にあるものに変更し、dplyrの方法で変更します。

私のサンプルデータ:

df = structure(list(date = c("2016-06-30", "2016-07-29", "2016-08-31", "2016-09-30", "2016-10-31", "2016-11-30"), ticker = c("A2M.ASX", "A2M.ASX", "A2M.ASX", "A2M.ASX", "A2M.ASX", "A2M.ASX"), value = c(0.0686, -0.0134, -0.065, 0.0145, 0.36, -0.1429)), .Names = c("date", "ticker", "value"), row.names = c(NA, 6L), class = "data.frame")
metric = "next_return"

私はそれを一行で行う方法を知っています:

colnames(df)[3] = metric

しかし、それをtidyverseの方法で実行して、パイプで使用できるようにします。私はreplace_をいじっていますが、なんとかエラーが発生します:

> dplyr::rename_(df, "ticker" = metric)
Error: `next_ret_1M` contains unknown variables
11
lebelinoz

最新のdplyr(> 0.7.0)を使用すると、

rename(df, !!metric:=value)

構文は "new_name = old_name"であり、:=!!とともに使用して、変数をパラメーター名の左側に配置する必要があります。

20
MrFlick