传递公式以在数据框中添加新列

Posted

技术标签:

【中文标题】传递公式以在数据框中添加新列【英文标题】:Passing formula to add new column in a data frame 【发布时间】:2013-09-29 06:00:14 【问题描述】:

我正在尝试使用闪亮的网络应用程序为数据框创建一个新列。 如果我们在此应用程序的公式选项中键入公式,它应该接收该公式并应该为数据框创建新列。我试过 attach()、subset() 函数,没用... 你能帮帮我吗。

界面:

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel( "Data Frame", "Data Frame"),
  sidebarPanel(

    wellPanel(

      fileInput('file', 'Select csv file', accept=c('text/csv') ),

      checkboxInput('header', 'Header', TRUE),

      gsub("label class=\"radio\"", "label class=\"radio inline\"",
           radioButtons('sep', 'Separator', c(Comma=',', Semicolon=';', Tab='\t' )))

    ),

    wellPanel(
      checkboxInput('addcol', 'Create New Variable', FALSE),

      conditionalPanel(condition="input.addcol!=0",
                       textInput('newvar', "Variable name","" ),
                       textInput('newformula', "Formula",""),
                       actionButton("apply","Apply Changes")
      )      
    )

  ),

mainPanel(
  tableOutput('contents') 
)
)) 

服务器:

library(shiny)
library(stats)
library(reshape)
require(utils)
shinyServer(function(input,output,session)

  dataset = reactive(
    inFile<-input$file
    if(is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header=input$header, sep=input$sep)
  )

  alterdata = reactive(
    if(input$apply==0)
      dataset<-transform(dataset(), new='')
      dataset <- rename(dataset, c(new=input$newvar))
      dataset
    
    else
    
      attach(dataset())
      dataset<-dataset()
      dataset$new<-cat(input$newformula, "\n")
      detach(dataset())
      dataset <- rename(dataset, c(new=input$newvar))
      dataset
    

    #dataset
    )


  data = reactive(
    if(input$addcol!=0)
    
      alterdata()
    
    else
    
      dataset()
    
  )    

  output$contents<-renderTable(
    if (is.null(input$file))  return()                             
    data()
  )

  )

)

【问题讨论】:

【参考方案1】:

我认为你应该尝试 dplyr 包中的 mutate_。 像

        mutate_formula <- setNames(lazyeval::interp(input$newformula), input$newvar)
        new_dataset <- dataset() %>%
            mutate_(.dots = mutate_formula)

【讨论】:

以上是关于传递公式以在数据框中添加新列的主要内容,如果未能解决你的问题,请参考以下文章

向数据框中的新列添加值

火花指数移动平均线

在火花数据框中使用 for 循环添加新列

在熊猫数据框中添加指示计数的新列

在 pyspark 数据框中的第一个序号位置添加一个新列

如何将新列添加到按 groupby 分组的分层数据框中