【问题标题】:How to quote just a column with write.csv/table in R?如何在 R 中仅引用带有 write.csv/table 的列?
【发布时间】:2018-04-18 08:05:18
【问题描述】:

我的数据在 write.csv in R 之后得到了这个结果:

Last_Name,Sales,Country,Quarter
Smith,$16,753.00 ,UK,Qtr 3
Johnson,$14,808.00 ,USA,Qtr 4
Williams,$10,644.00 ,UK,Qtr 2

想要这个结果(这是我数据的原始格式):

Last_Name,Sales,Country,Quarter
Smith,"$16,753.00 ",UK,Qtr 3
Johnson,"$14,808.00 ",USA,Qtr 4
Williams,"$10,644.00 ",UK,Qtr 2

因为显然我在金额上有些问题!

但我不想

"Last_Name","Sales","Country","Quarter"
"Smith,"$16,753.00 ","UK","Qtr 3"
"Johnson","$14,808.00 ","USA","Qtr 4"
"Williams","$10,644.00 ","UK","Qtr 2"

有什么想法吗?

【问题讨论】:

  • 销售栏的类型是什么?
  • 尝试使用df1$Sales <- shQuote(df1$Sales),然后使用quote = FALSE写入csv
  • 销售列是字符串,我无法更改格式
  • df1$Sales <- shQuote(df1$Sales) 不起作用,因为它添加了单引号,我需要双引号。

标签: r csv quotes


【解决方案1】:

尝试单独引用销售列:

df$Sales <- paste0("\"", df$Sales, "\"")

然后调用write.csv 不带引号。或者,您可以在调用write.csv 时指定要引用的列:

write.csv(file="out.csv", df, quote=c(2))

【讨论】:

  • df$Sales &lt;- paste0("\"", df$Sales, "\"") 工作正常!但没有最后的空格
  • write.csv(file="out.csv", df, quote=c(2)) 无法正常工作,因为它还在标题行中添加了引号:
  • 我的意思是整个标题行。
【解决方案2】:

这是data.table::fwrite 的默认行为,它只根据需要引用列(在您的情况下,为了消除Sales 字段的内部逗号的歧义):

library(data.table)
fwrite(y)
# Last_Name,Sales,Country,Quarter
# Smith,"$16,753.00 ",UK,Qtr 3
# Johnson,"$14,808.00 ",USA,Qtr 4
# Williams,"$10,644.00 ",UK,Qtr 2

为了方便,我只是写信给stdout,当然你可以指定一个输出文件作为第二个参数(file)。您还可以使用 quote 参数控制此行为; "auto",工作方式如下(来自?fwrite):

"auto"时,字符字段、因子字段和列名只会在需要的时候用双引号括起来;即,当字段包含分隔符sep、以\n 结尾的行、双引号本身或(当存在list 列时)sep2[2](参见下面的sep2)。

当然,fwriteway (can be upwards of 100x) faster than write.csv

【讨论】:

  • 太棒了,效果很好!!!它只用quote="auto" 解决了我的问题。我想现在我的初始数据可能是用fwrite 生成的。
  • 它可能会对我的工作有所帮助,我希望它会被广泛使用。 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 2011-09-06
  • 1970-01-01
  • 2020-08-19
  • 2019-04-24
  • 2013-04-23
相关资源
最近更新 更多