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

问题描述 投票:0回答:2

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

Reproducible example:

假设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 dplyr geospatial mutate nse
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

0
投票

有时平原R更简单。

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

你也可以尝试wrapr::let

library(wrapr)

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

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

© www.soinside.com 2019 - 2024. All rights reserved.