我在圖書館作業,我們在具有期刊文章資訊(標題、作者、摘要等)的 csv 中獲得常規資料庫輸出。它有67列,每次列名都一樣。每行都有不同期刊文章的引文資訊。目標是在一列中創建一個完整參考的電子表格(通過將不同的列粘貼在一起,如作者和出版日期)和另一列中的開放獲取狀態,并洗掉無關的列。我寫了一些 R 代碼,它會自動去除不必要的列并將其余的列粘貼在一起,當我唯一一個清理時,它運行良好。但是,我的主管希望辦公室里的其他人能夠執行這項作業,并要求我制作一個 R Shiny 應用程式來完成這項作業。我以前從未創建過。當我' 我已經設法為腳本的上傳和下載部分撰寫了代碼,但實際上我在讓清理部分作業時遇到了麻煩。第一段代碼是我已經在應用程式之外作業的清理作業,它可以作業。
library(tidyverse)
#data is the name of the csv after I load it
datasubset= subset(data, select = c(Author.Full.Names,Article.Title,Source.Title,Volume,Issue,Article.Number,DOI,Publication.Date,Publication.Year,Open.Access.Designations))
datasubset$Full.Date <- paste(datasubset$Publication.Date, datasubset$Publication.Year)
datasubset$Citation <- paste("Author(s): ",datasubset$Author.Full.Names,". Title:",datasubset$Article.Title,". Volume:",datasubset$Volume,". Issue:",datasubset$Issue,". Article Number:",datasubset$Article.Number,". DOI:",datasubset$DOI,". Published:",datasubset$Full.Date)
citationdata= subset(datasubset, select=c(Citation,Open.Access.Designations))
到目前為止,這就是我對 Shiny 應用程式的了解。我嘗試從幾個不同的教程(包括此處的其他問題)中以多種方式放置清潔代碼部分,但我不太明白。
library(tidyverse)
library(shiny)
ui <- fluidPage(
fluidPage(
titlePanel("Uploading Files"),
sidebarLayout(
sidebarPanel(
fileInput('data', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"'),
downloadButton('downloadData', 'Download')
),
mainPanel(
tableOutput('contents')
)
)
)
)
server <- function(input, output) {
getData <- reactive({
inFile <- input$data
if (is.null(input$data))
return(NULL)
read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
})
output$contents <- renderTable(
getData()
)
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(getData(), file)
})
}
shinyApp(ui, server)
如果有人能夠指出我如何將兩者合并在一起,我將不勝感激。理想情況下,有人可以將他們從資料庫下載的 csv 檔案上傳到應用程式,應用程式會對其進行清理,然后他們可以下載清理后的版本,其中只有兩列——引文和開放獲取狀態。另外,這是我在這里的第一篇文章,所以如果我遺漏了任何相關內容,請告訴我!謝謝!
uj5u.com熱心網友回復:
我認為你真的很接近這一點。我在評論中提出了一個問題,但我猜您希望在資料顯示在表格上之前對其進行清理。基本上你需要做的就是將你的“清理代碼”彈出到reactive. 我將 read.csv 放入一個名為“data”的新變數中以適應您的清理功能,然后在其后放置一個最終輸出“citationdata”。希望這是您正在尋找的:
library(tidyverse)
library(shiny)
ui <- fluidPage(
fluidPage(
titlePanel("Uploading Files"),
sidebarLayout(
sidebarPanel(
fileInput('data', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"'),
downloadButton('downloadData', 'Download')
),
mainPanel(
tableOutput('contents')
)
)
)
)
server <- function(input, output) {
getData <- reactive({
inFile <- input$data
if (is.null(input$data))
return(NULL)
data<-read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
# #data is the name of the csv after I load it
datasubset= subset(data, select = c(Author.Full.Names,Article.Title,Source.Title,Volume,Issue,Article.Number,DOI,Publication.Date,Publication.Year,Open.Access.Designations))
datasubset$Full.Date <- paste(datasubset$Publication.Date, datasubset$Publication.Year)
datasubset$Citation <- paste("Author(s): ",datasubset$Author.Full.Names,". Title:",datasubset$Article.Title,". Volume:",datasubset$Volume,". Issue:",datasubset$Issue,". Article Number:",datasubset$Article.Number,". DOI:",datasubset$DOI,". Published:",datasubset$Full.Date)
citationdata = subset(datasubset, select=c(Citation,Open.Access.Designations))
citationdata
})
output$contents <- renderTable(
getData()
)
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(getData(), file)
})
}
shinyApp(ui, server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364185.html
上一篇:如何重命名串列中的一個資料框
