2017-12-15 28 views
0

新しいデータ列を追加し、渡すパラメータを使用して列の名前を付けたいと思います。私はdplyrのmutate行単位名前を直接ハードコードする他の方法がありますが、ここでどこから開始するのかはわかりません。どのようにmutateや同様のシンプルな/エレガントなものを使用するのですか?新しい列を作成するためにパラメータ名に渡して 'mutate'を使用する

再現例:メイン

と仮定が、C(6渡された "NAME4" と新しいと文字列パラメータ

main <- data.frame(name1 = c(2,3,4), name2 = c(4,5,6), name3 = c(4,5,3)) 

そしてフィールド名によって定義されるデータフレームであるです5,4)

タックしたいフィールド名新しい最終データフレーム

name1 name2 name3 name4 
1  2  4  4  6 
2  3  5  5  5 
3  4  6  3  4 

が、以下の機能のための主要なにはまだそのように動作しません。

joinData <- function(main, new, fieldname) { 
    main$fieldname <- new # This does not work; Want my string variable's 
          # contents to become my new column name, 
          # not my variable's name "fieldname" 
    return(main) 
} 
+1

を使うのか?サンプル入力データを使って[再現可能なサンプル](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を提供すると、実際にはコードを実行してテストしてください。 – MrFlick

+0

別の機能からは正直なところ、これは一般的なケースだと思います。 (すなわちdata.frame(name1 = c(2,3,4)、name2 = c(4,5,6)、name3 = c(4,5,3);ここでfieldname = "name4"とac_vec = cと言う(6,5,4))は最小の例です) – shib

+1

しかし、フィールド名をシンボルとして渡そうとしていますか?文字列?元気?あなたは実際にそこに何を渡していますか? – MrFlick

答えて

2

、どのように正確にあなたがこの関数を呼び出している

dd <- data.frame(name1 = c(2,3,4), name2 = c(4,5,6), name3 = c(4,5,3)) 
joinData <- function(main, new, fieldname) { 
    main[[fieldname]] <- new 
    return(main) 
} 
# joinData(dd, letters[1:3], "letters") 
# name1 name2 name3 letters 
# 1  2  4  4  a 
# 2  3  5  5  b 
# 3  4  6  3  c 
0

時には単純なRが簡単です。

data %>% … %>% { .[[fieldname]] <- ac_vec; . } %>% … 

またwrapr::letを試すことができます。

library(wrapr) 

let(FIELDNAME=fieldname, data %>% … %>% mutate(FIELDNAME=ac_vec) %>% …) 

この問題とその解決策についてのいくつかの素敵な読み取りがwrapr authors blogです。あなたのサンプルと

関連する問題