2017-03-31 85 views
1

我正在嘗試創建一個應用程序,根據用戶的選擇將子集數據的數據框。之後,我想創建一個新的數據框,其中包含col1 abd的唯一值,並根據用戶的選擇(例如,從廣泛的日期的長形狀中)將新數據框添加爲現有數據框的新列。 任何想法??? 我的數據集時,首先用戶選擇「A」在閃亮的現有數據框上追加數據幀

的結果是這個

col1 col2 col3 col4 
    1 a  1 
    2 a  20  22 
    3 a  15  15 
    4 a    2 

然後,如果用戶選擇c中的那

col1<-rep(c(1:4),3) 
col2<-c('a','b','c','a','b','c','a','b','c','a','b','c') 
col3<-c(1,2,3,NA,NA,14,15,NA,NA,20,21,22) 
col4<-c(NA,NA,1,2,3,14,15,20,21,22,NA,NA) 
df<-data.table(col1,col2,col3,col4) 



# Define UI for application that draws a histogram 
ui <- fluidPage(

    # Application title 
    titlePanel("Old Faithful Geyser Data"), 

    selectInput('Ind', 'Index',choices = c(unique(df$col2))), 
    dataTableOutput('Table') 
) 
# Define server logic required to draw a histogram 
server <- function(input, output) { 



dfsel<-reactive({dfnew<-subset(df,col2==input$Ind) 
dfnew 
}) 
output$Table<-renderDataTable(dfsel()) 

} 

# Run the application 
shinyApp(ui = ui, server = server) 

什麼IA我想才達到的新的數據幀將

col1 col2 col3 col4 col2 col3 col4 
    1 a  1    c    21 
    2 a  20  22  c  14  14 
    3 a  15  15  c  3  1 
    4 a    2  c  22 

+2

您有什麼問題? –

+0

我想在我創建的數據集dfsel中插入,每次用戶選擇另一個輸入時,都會在dfsel上添加對應子集。一個問題是列名是相同的,我不能追加它們,所以我可以改變列名稱並追加新值? – Aleha

+0

您想在用戶選擇子集時將行添加到顯示的表中嗎? –

回答

1

好吧,我想我明白你想要什麼。這是我相信的。

我做了以下更改例如

  • 增加了一個新的DataTable(rv$dfnew)作爲reactiveValues跟蹤我們的數據表,因爲它生長
  • 改變了顯示屏顯示的當前選擇的部分數據框以及不斷增長的dfnew
  • 添加了一個計數變量,該計數變量附加到列上,以便我們繼續保持它們都是唯一的。
  • 添加了一個actionButton doAppendCols來追加這些列。

下面是代碼:

library(shiny) 
library(data.table) 
col1<-rep(c(1:4),3) 

col2<-c('a','b','c','a','b','c','a','b','c','a','b','c') 
col3<-c(1,2,3,NA,NA,14,15,NA,NA,20,21,22) 
col4<-c(NA,NA,1,2,3,14,15,20,21,22,NA,NA) 
df<-data.table(col1,col2,col3,col4) 

# Define UI for application that draws a histogram 
ui <- fluidPage(

    # Application title 
    titlePanel("Append Columns"), 

    selectInput('Ind', 'Index',choices = c(unique(df$col2))), 
    actionButton("doAppendCols","Append Columns"), 
    h2("Selected Data"), 
    dataTableOutput('selTable'), 
    h2("New Table"), 
    dataTableOutput('newTable') 
) 
# Define server logic required to draw a histogram 
server <- function(input, output) { 

    rv <- reactiveValues(dfnew=NULL,count=0) 

    observeEvent(input$doAppendCols,{ 
    rv$count <- rv$count+1 
    dfs <- dfsel() 
    # add a running number as suffix to column names to make the columns unique 
    newsuffix <- paste0(".",rv$count) 
    ncols <- ncol(dfs) 
    names(dfs)[2:ncols] <- paste0(names(dfs)[2:ncols],newsuffix) 
    if(is.null(rv$dfnew)){ 
     rv$dfnew <- dfs 
    } else { 
     rv$dfnew <- merge(rv$dfnew,dfs,by="col1") 
    } 
    }) 

    dfsel<-reactive({ 
    df<-subset(df,col2==input$Ind) 
    df <- df[order(df$col1),] 
    }) 
    output$selTable<-renderDataTable(dfsel()) 
    output$newTable<-renderDataTable(rv$dfnew) 

} 

# Run the application 
shinyApp(ui = ui, server = server) 

這裏是輸出示例:

enter image description here

+0

謝謝!這些都是我想要做的事情,而且我對列的名字有問題!謝謝!!! – Aleha