首页 > 解决方案 > 使用 fwrite 在 R 中包含字符字段的引号

问题描述

我在输出带有引号的数据表中的字符字段时遇到问题。我将 fwrite 函数与 data.table 包一起使用。

for (i in 1:length(mpfdf)){ 
  fwrite(x[[i]], file = paste0('../',x[[i]]), row.names = F, col.names = T)
 }

我的预期输出:

Header1,Header2,Header3

1,"abcd",5

我的实际输出:

 Header1,Header2,Header3

 1,abcd,5

 5,bbbb,6

我也尝试使用以下引用参数:

for (i in 1:length(mpfdf)) {
  fwrite(mpfdf[[i]], file = paste0('../',mpfs[[i]]), row.names = F, col.names = T, quote ="auto")
  }

这给了我与上面相同的实际输出。

我还尝试了以下方法:

for (i in 1:length(mpfdf)) {
  fwrite(mpfdf[[i]], file = paste0('../',mpfs[[i]]), row.names = F, col.names = T, quote =T)
  }

但是,这也会使输出中的标题包含“”。

例如

   "Header1","Header2","Header3"

   1,"abcd",5

   5,"bbbb",6

我确信有办法解决这个问题,但我对使用 R 进行数据操作还是比较陌生。提前谢谢了。

标签: rdata.table

解决方案


您可以将引号添加到列中,然后fwrite()使用 withquote = FALSE以防止它添加额外的引号。

DT[, Header2 := paste0('\"', Header2, '\"')]
fwrite(DT, "test.csv", quote = FALSE)

输出

Header1,Header2,Header3
1,"abcd",5
5,"bbbb",6

可重现的数据:

DT <- fread(
 "Header1,Header2,Header3
 1,abcd,5
 5,bbbb,6"
)

推荐阅读