我正在编写一系列内部使用dplyr
来处理数据的函数。
在很多地方,我想在使用数据集时将新变量添加到数据集。但是,由于我不知道要传递的数据集中的内容,因此我不确定如何命名这些新变量,以避免覆盖数据中已有的变量。
在基本R中,我可以这样做:
df <- data.frame(a = 1:5)
df[, ncol(df)+1] <- 6:10
,它将为新添加的变量选择一个不与任何现有名称冲突的名称。我想在dplyr
中执行此操作,而不是破坏dplyr
的一致应用以返回至base-R。
到目前为止,我想到的所有解决方案都非常笨拙,或者无论如何都需要使用一堆base-R融合,这并不比在base-R中添加变量更好。
names()
向量,并使用多种方法之一生成不在向量中的名称在dplyr
中有直接的方法吗?尽管我认为mutate
或bind_cols
也可以,但最好在tibble::add_column
中使用它。
我尝试过的某些方法不起作用:
df <- data.frame(a = 1:5)
# Gives the new variable a fixed title which might already be in there
df %>% mutate(6:10)
df %>% tibble::add_column(6:10)
df %>% mutate(NULL = 6:10)
# Error
df %>% bind_cols(6:10)
df %>% mutate( = 6:10)
df %>% mutate(!!NULL := 6:10)
# And an example of the kind of function I'm looking at:
# This function returns the original data arranged in a random order
# and also the random variable used to arrange it
arrange_random <- function(df) {
df <- df %>%
mutate(randomorder = runif(n())) %>%
arrange(randomorder)
return(df)
}
# No naming conflict, no problem!
data <- data.frame(a = 1:5)
arrange_random(data)
# Uh-oh, the original data gets lost!
data <- data.frame(randomorder = 1:5)
arrange_random(data)
答案 0 :(得分:2)
我现在正在发布此解决方案。这听起来像是不太了解自己的数据的情况,因此我认为一种好的方法是在函数中包含const username = req.body.username;
const refreshToken = req.body.refreshToken;
User.forge({ username: username })
.fetch({ require: true })
.then((user) => user.save({ refreshToken : refreshToken }))
.catch((error) => return res.json({message: error.message}))
语句。逻辑是用户选择一些任意的新名称作为后缀添加到其原始变量名称中,但是如果新名称已包含在原始数据中,则该函数将返回错误。否则,该函数将运行并返回原始数据以及新突变的数据。
if-else