首页 文章

使用mutate和dplyr创建一个包含替换值的列

提问于
浏览
0

这可能是stackoverflow上某处的重复,是dplyr mutate replace dynamic variable name的后续问题 .

现在我尝试使用变量名作为新列 .

就像是:

library(ggplot2)
 data(mpg)
 mpg %>% mutate(hwy=replace(hwy, hwy>29,10))

下面的代码创建了一个名为varname的新列,但我想用hwy替换该列 .

varname = "hwy"
mpg %>% mutate_(varname=interp(~replace(varname, varname>29, 10), varname=as.name(varname)))

就像是:

mpg %>% mutate_(as.name(varname)=interp(~replace(varname, varname>29, 10), varname=as.name(varname)))

但这不起作用 . 我认为点符号在起作用但不太确定如何绕过它 .

谢谢 .

1 回答

  • 1

    我没有替换 mpg 现有的 hwy 变量,而是执行以下操作来说明相同的事情并将其放入context

    从您之前的问题:

    library(dplyr)
    library(ggplot2)
    library(lazyeval)
    
    data(mpg)
    
    # "normal" dplyr
    a <- mpg %>% mutate(hwybin=replace(hwy>25,1,0))
    
    
    # varying just the RHS
    varname <- "hwy"
    b <- mpg %>% mutate_(hwybin=interp(~replace(varname>25, 1 ,0),
                                       varname=as.name(varname)))
    
    identical(a, b)
    

    对于这个特殊问题:

    # varying both RHS and LHS
    
    colname <- "hwybin"
    z <- mpg %>% mutate_(.dots=setNames(list(interp(~replace(varname>25, 1 ,0),
                                varname=as.name(varname))), colname))
    
    # tests
    identical(a, z)
    identical(b, z)
    

相关问题