【发布时间】:2014-11-18 03:50:35
【问题描述】:
我想使用dplyr::mutate() 在数据框中创建多个新列。列名及其内容应该是动态生成的。
鸢尾花数据示例:
library(dplyr)
iris <- as_tibble(iris)
我创建了一个函数来改变 Petal.Width 变量中的新列:
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
df <- mutate(df, varname = Petal.Width * n) ## problem arises here
df
}
现在我创建一个循环来构建我的列:
for(i in 2:5) {
iris <- multipetal(df=iris, n=i)
}
但是,由于 mutate 认为 varname 是一个字面变量名,因此循环只会创建一个新变量(称为 varname)而不是四个(称为petal.2 -petal.5)。
如何让mutate() 使用我的动态名称作为变量名?
【问题讨论】:
-
这个小插曲甚至没有提到
mutate_,从其他函数中也看不出如何使用它。 -
我一直在努力理解
quosure等人。多年的文档。虽然上面的小插图链接不再有效,但该评论将我引向此摘要以进行整理评估:shipt.tech/…。我终于明白了!谢谢。 -
dplyr提供了涵盖此内容的 this excellent vignette on Programming with dplyr。 -
与基本 R 相比,在 dplyr 中似乎过于复杂,在循环时获取动态名称...
-
如果您需要多次执行相同的操作,它通常会告诉您您的数据格式不是最优的。您想要更长的格式,
n是 data.frame 中的一列(请参阅下面的答案)