我想添加一个新的数据列并使用我传入的参数命名列。我习惯使用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)
}
使用您的样品,请使用
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
有时平原R更简单。
data %>% … %>% { .[[fieldname]] <- ac_vec; . } %>% …
你也可以尝试wrapr::let
:
library(wrapr)
let(FIELDNAME=fieldname, data %>% … %>% mutate(FIELDNAME=ac_vec) %>% …)
关于这个问题及其解决方案的一些很好的解读是在wrapr
authors blog。