使用 '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)
我想将 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)
}
有时纯 R 更简单。
data %>% … %>% { .[[fieldname]] <- ac_vec; . } %>% …
你也可以试试wrapr::let
:
library(wrapr)
let(FIELDNAME=fieldname, data %>% … %>% mutate(FIELDNAME=ac_vec) %>% …)
上有关于此问题及其解决方案的一些不错的读物
对于你的样本,使用
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
我想添加一个新的数据列,并使用我传入的参数命名该列。我习惯使用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)
我想将 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)
}
有时纯 R 更简单。
data %>% … %>% { .[[fieldname]] <- ac_vec; . } %>% …
你也可以试试wrapr::let
:
library(wrapr)
let(FIELDNAME=fieldname, data %>% … %>% mutate(FIELDNAME=ac_vec) %>% …)
上有关于此问题及其解决方案的一些不错的读物
对于你的样本,使用
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