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

时间:2017-12-15 21:42:14

标签: r dplyr geospatial mutate nse

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

可重复示例:

假设 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)

我想将 fieldname new 添加到 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)
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

有时普通R更简单。

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

您还可以尝试wrapr::let

library(wrapr)

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

关于这个问题及其解决方案的一些很好的解读是wrapr authors blog