【问题标题】:Can't write a .csv the way I'd like无法以我想要的方式编写 .csv
【发布时间】:2018-02-16 17:04:27
【问题描述】:

我想创建一个名为“扩展”的数据框的 .csv。查看文件时,我必须使用“carwaytempshort.csv”,它有一个很好的布局,列和行整齐地排列。查看“扩展”的 data.frame 时,它​​看起来很像“carwaytempshort.csv”,行和列整齐对齐。但是,当使用 write.csv 或 write.table 时,“Extended.csv”非常没有吸引力。列和行没有对齐,而是每个数据都有引号,有些行是两行。

我尝试了以下代码行:

> write.table(Extended, "Extended.csv")

还有:

> write.csv(Extended, "Extended.csv")

这就是我希望“Extended.csv”的样子(这就是“Extended”的样子):

这是我得到的:

【问题讨论】:

  • 第一个文件不是 CSV(尽管有扩展名)。它是固定宽度的列。 CSV 文件是机器可处理的,而不是人类可读的。如果您想要漂亮的文本,请使用不同于 CSV 的格式。
  • 用文本编辑器看看,文件好像是制表符分隔的
  • CSV 代表逗号分隔值。所以它应该是一堆用逗号分隔的值。如果您想要空格,它们是否对齐并且没有逗号,那么您可能需要考虑固定宽度格式。此外,如果您的数字有引号,这可能意味着您的 data.frame 中的数据属于错误的类别。在您的第一个选择中,您似乎正在使用 rstudio 表格查看器——您没有查看文件的原始内容。
  • 寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出
  • 如果您在电子表格程序(如 excel)中打开 Extended.csv,它应该看起来像您想要的那样。

标签: r csv write.table


【解决方案1】:

使用内置的anscombe 数据框,使用sprintf 以您喜欢的任何方式格式化行:

fmt <- paste(rep("%10s", ncol(anscombe)), collapse = ",")
outLines <- c(do.call("sprintf", as.list(c(fmt, names(anscombe)))), 
      do.call("sprintf", c(fmt, anscombe)))
writeLines(outLines, stdout())

给予:

x1,        x2,        x3,        x4,        y1,        y2,        y3,        y4
10,        10,        10,         8,      8.04,      9.14,      7.46,      6.58
 8,         8,         8,         8,      6.95,      8.14,      6.77,      5.76
13,        13,        13,         8,      7.58,      8.74,     12.74,      7.71
 9,         9,         9,         8,      8.81,      8.77,      7.11,      8.84
11,        11,        11,         8,      8.33,      9.26,      7.81,      8.47
14,        14,        14,         8,      9.96,       8.1,      8.84,      7.04
 6,         6,         6,         8,      7.24,      6.13,      6.08,      5.25
 4,         4,         4,        19,      4.26,       3.1,      5.39,      12.5
12,        12,        12,         8,     10.84,      9.13,      8.15,      5.56
 7,         7,         7,         8,      4.82,      7.26,      6.42,      7.91
 5,         5,         5,         8,      5.68,      4.74,      5.73,      6.89

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多