1
我需要上傳多個CSV文件(dummy multiple files)並應用一些操作,以每個文件,然後將所得dataframes合併成一個數據幀和將輸出下載爲csv文件。我的原始R代碼工作,但我需要把它放在閃亮的自動化過程,但不知何故,當我上傳兩個文件,我得到這個錯誤:「下標越界」。幫助將不勝感激。這是我的工作原生R代碼裏面:上傳多個文件中有光澤,工藝文件,rbind結果,並返回一個下載
files = list.files("G:/JSON to CSV/merge")
numfiles = nrow(inFile)
kata_csv1 = list()
for (i in 1:numfiles)
{
kata_csv = function(y){
JSON_csv = read.csv(y, header = TRUE)
lastrow = nrow(JSON_csv)
shift = function(x, n){
c(x[-(seq(n))], rep(NA, n))
}
JSON_csv$companyID1 = shift(JSON_csv$companyID1, 1)
JSON_csv = JSON_csv[-lastrow, ]
JSON_csv
}
kata_csv1[[i]] = kata_csv(files[i])
}
myMergedData = do.call(rbind, kata_csv1)
write.csv(myMergedData, "myMergedData.csv", row.names=FALSE)
這裏是我的閃亮的代碼沒有工作:
UI.R:
ui <- fluidPage(
fluidPage(
titlePanel("MY CSV FILES MERGER"),
sidebarLayout(
sidebarPanel(
fileInput("file1",
"Choose CSV files from directory",
multiple = TRUE,
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
downloadButton('downloadData', 'Download')
),
mainPanel(
tableOutput('contents')
)
)
)
)
Server.R:
library(shiny)
library(dplyr)
function(input, output) {
getData <- reactive({
inFile <- input$file1
if (is.null(inFile)){
return(NULL)
} else {
numfiles = length(inFile)
kata_csv1 = list()
for (i in 1:numfiles)
{
JSON_csv = read.csv(input$file1[[i, 'datapath']], header = TRUE)
lastrow = nrow(JSON_csv)
shift = function(x, n){
c(x[-(seq(n))], rep(NA, n))
}
JSON_csv$companyID1 = shift(JSON_csv$companyID1, 1)
kata_csv1[[i]] = JSON_csv[-lastrow, ]
}
do.call(rbind, kata_csv1)
}
})
output$contents <- renderTable(
getData()
)
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(getData(), file, row.names=FALSE)
})
}
您好,感謝您的貢獻。我已經改變'numfiles =長度(infile中)''到numfiles = nrow(infile中)',且有誤差,但隨後,這應該是一個數據幀所下載的輸出文件僅顯示引號「」。任何線索?謝謝。 – William
你可以附加一個示例數據文件嗎?沒有數據文件,有點難以猜測可能是什麼問題。 – SBista
你好。謝謝。我上傳了兩個虛擬多個文件。要做的是上傳這兩個文件,使用for循環中的shift()更正這兩個文件中的異常,將這兩個文件作爲csv文件並將其輸出。實際上,在這兩個文件的異常將被校正爲(1)在第一列第一值需要被刪除,並在第一列中單元格移動一步時,(2)therefater數據幀的最後一行是要刪除。 shift()正在處理這個問題。因爲我正在處理很多文件,所以我希望能夠讓這個過程自動化。謝謝。 – William