为啥 write.csv 将 R 中的 4 列转换为 1 列闪亮?

Posted

技术标签:

【中文标题】为啥 write.csv 将 R 中的 4 列转换为 1 列闪亮?【英文标题】:Why does write.csv transform 4 columns to 1 column in R shiny?为什么 write.csv 将 R 中的 4 列转换为 1 列闪亮? 【发布时间】:2022-01-15 04:12:54 【问题描述】:

我目前正在使用一个项目,我需要在其中将数据框导入导出为 .csv 文件。代码如下:

ui.R

fileInput(
  "file1",
  "Importer depuis un fichier",
  accept = c(
    "text/csv",
    "text/comma-separated-values,text/plain",
    ".csv")
),
rHandsontableOutput("tabl")
downloadButton(
  "imprCsv",
  "Imprimer en CSV"
)

server.R

reactDataBase <- reactiveValues(data = dataBase)
output$tabl <- renderRHandsontable(
  rhandsontable(reactDataBase$data, useTypes = TRUE, stretchH = "all") %>%
  hot_col("Pièce", readOnly = TRUE) %>%
  hot_col("Désignation", readOnly = TRUE)
)

observe(
  inFile <- input$file1
  if(is.null(inFile)) return(NULL)
  reactDataBase$data<<-read.table(file=inFile$datapath, header=TRUE, sep=";", na.string="")
)

output$imprCsv <- downloadHandler(
  filename = function() paste0("Rapport ", str_replace_all(Sys.time(), ":", "_"), ".csv"),
  content = function(file) 
    print(reactDataBase$data)
    write.csv(reactDataBase$data, file)
  
)

问题,这里的 csv 文件不是类型

    Piece   Name   Value   Minim
1   P2      Picj   12      TRUE
2   P5      Picj   23      TRUE
3   P6      Picj   11      TRUE
4   C15     Calg   9       TRUE
5   X34     Xanol  878     TRUE

但看起来更像:

,"Piece","Name","Value","Minim"
1,"P2","Picj","12","TRUE"
2,"P5","Picj","23","TRUE"
3,"P6","Picj","11","TRUE"
4,"C15","Calg","9","TRUE"
5,"X34","Xanol","878","TRUE"

有什么办法吗?

【问题讨论】:

Value 的左对齐让我觉得它的类型是数字而不是字符。 Minim 可能也是如此。 write.csvquote 参数的默认值为 TRUE。因此,行为很可能符合预期。要检查,我们需要查看reactDatabase$data 中列的类型。你还没有给我们。 首先感谢您的帮助@Limey。 reactDataBase$data 中的类型并不重要,因为我在这个例子中放了一些随机值。问题是它将一行中的每个信息重新组合成一个字符串以放入一列中。我的reactDataBase$data 是一个完美的数据框,就像我向您展示的第一个选项卡一样,所以我认为问题来自write.csv。告诉我你是否理解我想要告诉你的内容。 【参考方案1】:

好的,我找到了解决方案。

我只是使用write.csv2 而不是write.csv?

【讨论】:

以上是关于为啥 write.csv 将 R 中的 4 列转换为 1 列闪亮?的主要内容,如果未能解决你的问题,请参考以下文章

使用 write.csv 时防止将行名写入文件

如何在R中的空数据框中创建新列[重复]

R write.csv 没有正确处理像é这样的字符

R语言计算行列数时列数错误是啥原因?应该有五列但只显示一列,导入的csv格式

r语言如何输出数据集过长,导致输出截断,怎么解决这个问题

使用 R 在一个 .csv 文件中写入不同的数据帧