web-dev-qa-db-ja.com

dplyrの名前変更関数に新しい列名を文字列として入力します

dplyrの名前変更関数では、新しい列名を引用符で囲まれていない変数名として渡す必要があります。しかし、私は渡された引数に文字列を貼り付けることで列名を構築する関数を持っているので、文字列もそうです。

たとえば、私にこの機能があったとしましょう

myFunc <- function(df, col){
  new <- paste0(col, '_1')
  out <- dplyr::rename(df, new = old)
  return(out)
}

これを実行すると

df <- data.frame(a = 1:3, old = 4:6)
myFunc(df, 'x')

私は得る

  a new
1 1   4
2 2   5
3 3   6

一方、「新しい」列には、構築した文字列の名前(「x_1」)を使用します。

  a x_1
1 1   4
2 2   5
3 3   6

とにかくこれを行うのですか?

26
user1165199

これはあなたが探していたものだと思います。 @Henrikが示唆したように、これはrename_の使用ですが、引数には、たとえば、興味深い名前があります。

> myFunc <- function(df, col){
+   new <- paste0(col, '_1')
+   out <- dplyr::rename_(df, .dots=setNames(list(col), new))
+   return(out)
+ }
> myFunc(data.frame(x=c(1,2,3)), "x")
  x_1
1   1
2   2
3   3
>

リストの名前としてnewの値を使用するには、setNamesを使用していることに注意してください。

21
kasterma