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