我想使用dplyr dplyr::mutate()在数据框中创建多个新列.应动态生成列名称及其内容.
来自虹膜的示例数据:
library(dplyr)
iris <- tbl_df(iris)
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个函数来改变Petal.Width变量中的新列:
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
df <- mutate(df, varname = Petal.Width * n) ## problem arises here
df
}
Run Code Online (Sandbox Code Playgroud)
现在我创建一个循环来构建我的列:
for(i in 2:5) {
iris <- multipetal(df=iris, n=i)
}
Run Code Online (Sandbox Code Playgroud)
但是,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname)而不是四个(称为petal.2 - petal.5).
如何将mutate()动态名称用作变量名?
是否可以使用dplyr的mutate函数而无需对变量名进行硬编码?例如,以下代码有效,因为我硬编码名称Var1:
> d=expand.grid(1:3, 20:22)
> d
Var1 Var2
1 1 20
2 2 20
3 3 20
4 1 21
5 2 21
6 3 21
7 1 22
8 2 22
9 3 22
> d=mutate(d, x=percent_rank(Var1))
> d
Var1 Var2 x
1 1 20 0.000
2 2 20 0.375
3 3 20 0.750
4 1 21 0.000
5 2 21 0.375
6 3 21 0.750
7 1 22 0.000
8 2 22 0.375
9 3 22 0.750
Run Code Online (Sandbox Code Playgroud)
但是,当我将变量的名称变为变量时,它不再起作用: …