为了账号安全,请及时绑定邮箱和手机立即绑定

dplyr-muate:使用动态变量名称

dplyr-muate:使用动态变量名称

有只小跳蛙 2019-06-19 16:10:43
dplyr-muate:使用动态变量名称我想用dplyr‘s mutate()若要在数据框架中创建多个新列,请执行以下操作。应该动态生成列名及其内容。来自虹膜的示例数据:require(dplyr)data(iris)iris <- tbl_df(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)}但是,由于muate认为varname是一个字面变量名,所以循环只创建一个新变量(称为varname),而不是创建4个变量(称为petal.2-petal.5)。我怎么才能mutate()使用我的动态名称作为变量名?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

在新发布的dplyr (0.6.0等待2017年4月),我们也可以完成一项任务(:=)并通过取消引用(!!)不对其进行评估

 library(dplyr)
 multipetalN <- function(df, n){
      varname <- paste0("petal.", n)
      df %>%
         mutate(!!varname := Petal.Width * n)
 }

 data(iris)
 iris1 <- tbl_df(iris)
 iris2 <- tbl_df(iris)
 for(i in 2:5) {
     iris2 <- multipetalN(df=iris2, n=i)
 }

基于@MrFlick的输出检查multipetal在“iris 1”上应用

identical(iris1, iris2)#[1] TRUE


查看完整回答
反对 回复 2019-06-19
?
白板的微信

TA贡献1883条经验 获得超3个赞

这是另一个版本,可以说更简单一些。


multipetal <- function(df, n) {

    varname <- paste("petal", n, sep=".")

    df<-mutate_(df, .dots=setNames(paste0("Petal.Width*",n), varname))

    df

}


for(i in 2:5) {

    iris <- multipetal(df=iris, n=i)

}


> head(iris)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species petal.2 petal.3 petal.4 petal.5

1          5.1         3.5          1.4         0.2  setosa     0.4     0.6     0.8       1

2          4.9         3.0          1.4         0.2  setosa     0.4     0.6     0.8       1

3          4.7         3.2          1.3         0.2  setosa     0.4     0.6     0.8       1

4          4.6         3.1          1.5         0.2  setosa     0.4     0.6     0.8       1

5          5.0         3.6          1.4         0.2  setosa     0.4     0.6     0.8       1

6          5.4         3.9          1.7         0.4  setosa     0.8     1.2     1.6       2


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 719 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信