如何在R中的write.csv中有条件地删除双引号

时间:2016-02-10 21:25:50

标签: r output double-quotes

我有包含数字和字符值的数据,分隔符是逗号。但是在某些字符值中,也有逗号。 当我输出为CSV文件时,我不想双引号引用我的所有列,包括数字和字符列,但只有那些有逗号。

数据是这样的:

col1 col2 col3 col4 ....
1    1    A    A,B ...
2    2    B    a,b ...
3    3    c    a,b ...

CSV文件中我想要的输出应该是这样的:

col1 col2 col3 col4 ....
1    1    A    "A,B" ...
2    2    B    "a,b" ...
3    3    c    "a,b" ...

write.csv(data,path, quote=T/F)的代码可以控制所有列和行而不是特定的单元格。 代码write.table(data,path, qmethod="double"/"escape")

也是如此

我只能按照以下定义引用一列:

write.csv(data,path, quote=2)

但我确实想在它们有逗号的时候引用几个单元格。 有没有人有想法?

2 个答案:

答案 0 :(得分:1)

我认为您可以使用write_csv包中的readr

df <- read.table(header=T, text='col1 col2 col3 col4
1    1    A    "AB"
2    2    B    "a,b"
3    3    c    "a,b"')
readr::write_csv(df, tf <- tempfile(fileext = ".csv"))
file.show(tf)
# col1,col2,col3,col4
# 1,1,A,AB
# 2,2,B,"a,b"
# 3,3,c,"a,b"

来自?readr::write_csv

  

仅在需要时引用值:如果它们包含逗号,引号或   换行符。

答案 1 :(得分:0)

lukeA的答案看起来更直接,但是这会允许您将包含逗号的列转换为具有实际引号的列:

static volatile auto var = &foo

这些内容应显示在> dat[] <- lapply(dat, function(x) if (is.character(x) & any(grepl("[,]",x)) ){ paste0("\"", x, "\"")} else{x} ) > dat col1 col2 col3 col4 1 1 1 A "A,B" 2 2 2 B "a,b" 3 3 3 c "a,b" 的{​​{1}}输出中。