使用 'mutate' 和传入的参数名称来创建新列

Using 'mutate' with passed in parameter name to create new column

我想添加一个新的数据列,并使用我传入的参数命名该列。我习惯使用dplyr的逐行mutate和其他直接硬编码名称的方法,但我不确定从哪里开始。我将如何使用 mutate 或类似的东西 simple/elegant?

可重现的例子:

假设 main 是由

定义的数据帧
main <- data.frame(name1 = c(2,3,4), name2 = c(4,5,6), name3 = c(4,5,3))  

fieldname是一个字符串参数,传入"name4",new是c(6,5,4)

我想将 fieldnamenew 添加到 main 上以获得最终数据帧

    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)
}

有时纯 R 更简单。

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

你也可以试试wrapr::let:

library(wrapr)

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

wrapr authors blog.

上有关于此问题及其解决方案的一些不错的读物

对于你的样本,使用

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