【问题标题】:How to mutate a dataset using an arithmetical expression in R如何使用 R 中的算术表达式改变数据集
【发布时间】:2018-09-02 15:46:27
【问题描述】:

我想使用 R 中的算术表达式动态改变数据集。 我尝试跟随但没有成功。感谢一些帮助。

newCol <- 'newCol=gear+wt'

mutate(mtcars,!!newCol) ## This inserted a column newCol=gear+wt

mutate(mtcars,!!sym(newCol)) ## THis gives an error 

'mutate_impl(.data, dots) 中的错误:找不到绑定:newCol=gear+wt.'

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是dplyr评估不规范的问题。

    先引用你的表达,然后取消引用。

    newCol <- quo(gear + wt)
    
    dplyr::mutate(mtcars, !! newCol)
    

    这个在这里很有帮助:https://dplyr.tidyverse.org/articles/programming.html

    值得一读,很棒:)

    【讨论】:

    • 为了正确看待我的问题,我无法接受表达式作为输入并在 shinyR 中执行计算。
    • library(shiny) library(plyr) library(dplyr) library(DT) library(data.table) ui
    • server
    • newCol = reactive({ quo(formulaPars()) }) output$data
    • 我认为这可能值得提出一个新问题——因为我的回答(希望)已经充分回答了您的原始问题
    【解决方案2】:

    在输入函数参数时不要使用 dplyr 中,mutate 是一个允许您根据任何计算创建新列的函数。这是一个例子:

    library(dplyr)
    dataset <- mtcars
    dataset %>% mutate(newCol = gear+wt) 
    

    这里不需要sym。 希望这就是您想要的。

    【讨论】:

      【解决方案3】:
      library(dplyr)
      
      newCol <- eval(parse(text='gear+wt'),list2env(mtcars))
      
      mutate(mtcars, newCol = newCol)
      

      或者,使用 base R 代替 mutate:

      mtcars$newCol <- eval(parse(text='gear+wt'),list2env(mtcars))
      mtcars
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-25
        • 2014-01-12
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 2013-08-24
        相关资源
        最近更新 更多