0

我想添加一个新的数据列并使用我传入的参数命名该列。我习惯于使用 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)

我想将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)
}
4

2 回答 2

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
于 2017-12-15T22:24:20.013 回答
0

有时普通的 R 更简单。

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

您也可以尝试wrapr::let

library(wrapr)

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

关于这个问题及其解决方案的一些不错的读物在wrapr作者博客上

于 2017-12-15T22:04:16.890 回答