传递公式以在数据框中添加新列
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)
【讨论】:
以上是关于传递公式以在数据框中添加新列的主要内容,如果未能解决你的问题,请参考以下文章