将 CSV 文件上传到 Shiny 应用程序时出现问题:数据不可读且列名称无法识别

问题描述 投票:0回答:1

我在尝试将 CSV 文件上传到我的 Shiny 应用程序时遇到问题。

将我的 Excel 数据保存为 CSV 文件并将其上传到 Shiny 应用程序后。我尝试检查 https://shiny.posit.co/r/gallery/widgets/file-upload/ 上发生的情况,我发现启用了“标题”选项后,Shiny 会抛出一个错误,指出“列数多于列名称。”

此外,我的 Excel 文件包含名为“Temperature”和“A1”的两列。但是,将 CSV 文件上传到 Shiny 时,这些列名称将被解释为列内的数据点,而不是实际的列标题。看 图片

此外,我的数据包含逗号(,)作为小数分隔符,这可能会导致解析问题。我尝试将 Excel 文件中的所有逗号替换为句点 (.),然后再将其导出到 CSV,但这似乎无法解决问题。

我通过将 Excel 文件导出为 CSV UTF-8 格式来保存数据,然后直接将其上传到应用程序中。 就是excel。 这就是 csv 与 txt 的样子:

Temperature;A1
71,85;5,62
71,79;5,68
71,82;5,58
71,79;5,57
71,82;5,55
71,79;5,55
71,79;5,54
71,82;5,51

我使用的闪亮应用程序是:https://pavloh.shinyapps.io/hrmR/来自Pavlo Hrab(http://doi.org/10.5281/zenodo.4491296

示例数据

df1 <- data.frame(Temperature = c(71.85, 71.79, 71.82, 71.79, 71.82, 71.79, 71.79,  71.82, 71.82), y = c(5.62, 5.68, 5.58,  5.57,  5.55, 5.55, 5.54,  5.51,5.52))

这是用 R 编写的,小数被写成句点。我的实际数据从 xlsx 文件导出到 csv,其中小数被写为小数

脚本:

   # Look at file upload, As soon as file is uploaded prepare the data and save it
    observeEvent(input$hmr,{
        # Read the first line and define the delimiter. Then read the whole data
        L <- readLines(input$hmr$datapath, n = 1)
        if (grepl(";", L)) vals$df <- read.csv2(input$hmr$datapath) else vals$df <- read.csv(input$hmr$datapath)
        # Drop NA columns
        vals$df <- vals$df[,colSums(is.na(vals$df))<nrow(vals$df)]
        write.csv(vals$df, file = "data.csv", row.names = F)
        
         })
    # Drop data from master dataframe (columns - individual results)
    observeEvent(input$drop,{
        to_drop <- input$drop_txt
        # First split the input by comma, then by range
        commas <- strsplit(to_drop, ",")
        ranges_drop <- trimws(unlist(strsplit(unlist(commas)[grepl("-", unlist(commas))], "-")))
        ind_col_drop <- trimws(unlist(commas)[!grepl("-", unlist(commas))])
        # Logic on how to split the data - like an individual column, or by range of columns. First go by ranges
        if (length(ranges_drop) > 0) {
            vals$df <- vals$df%>%
            select(!ranges_drop[1]:ranges_drop[2])
        }
        if (length(ind_col_drop) > 0){
            vals$df <- vals$df%>%
            select(-one_of(ind_col_drop))
        }
        # Set recluster to true
        vals$kmeans_cluster_actions <-  TRUE
    })
    # If reset button is triggered -> reset the daatframe (TO-DO: Add additional values change to recompute everything)
    observeEvent(input$reset,{
        vals$df <- read.csv("data.csv")
    })

有人可以建议我如何调整 Excel 文件或导出设置以确保 CSV 文件可由 Shiny 应用程序读取吗?

我尝试在应用程序中上传数据,希望它能根据我输入的数据显示熔解曲线分析。但我不断收到错误。

r excel csv shiny
1个回答
0
投票

我认为数据格式问题是一个转移注意力的问题。请参阅下面的表示,其中示例数据被下载、子集化和格式化,以便与 OP 的数据相似,然后写出为:

  1. example_write.csv.csv(逗号以小数点分隔)
  2. example_write.csv2.csv(分号与逗号分隔)

这些文件中的任何一个都可以上传到应用程序https://pavloh.shinyapps.io/hrmR/并成功处理。

相反,我认为 OP 的数据根本不适合分析。

# download and unzip example file
zip_file <- "hrmR-v0.1-alpha.zip"
download.file("https://zenodo.org/records/4491296/files/pavlohrab/hrmR-v0.1-alpha.zip?download=1", zip_file, mode = "wb")
unzip(zip_file, "pavlohrab-hrmR-494cffb/example/example.csv", junkpaths = TRUE)

# read and subset example file to be similar to OP data structure
# but with way more observations
data_csv <- read.csv("example.csv")
data_csv <- data_csv[, 1:2]
names(data_csv)[2] <- "A1"

# write comma separated with decimals
write.csv(data_csv, "example_write.csv.csv", quote = FALSE, row.names = FALSE)
# notice formatting is as desired
cat(paste(readLines("example_write.csv.csv", 5), collapse = "\n"))
#> Temperature,A1
#> 65,3495.918232
#> 65.2,3507.963312
#> 65.4,3520.008391
#> 65.6,3532.053471

# write semicolon separated with commas
write.csv2(data_csv, "example_write.csv2.csv", quote = FALSE, row.names = FALSE)
# notice formatting is as desired
cat(paste(readLines("example_write.csv2.csv", 5), collapse = "\n"))
#> Temperature;A1
#> 65;3495,918232
#> 65,2;3507,963312
#> 65,4;3520,008391
#> 65,6;3532,053471

创建于 2024-05-07,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.