【问题标题】:how to conditional remove double quotes in write.csv in R如何有条件地删除 R 中 write.csv 中的双引号
【发布时间】:2016-02-10 21:25:49
【问题描述】:

我有包含数字和字符值的数据,分隔符是逗号。但是在某些字符值中,也有逗号。 当我输出为 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)

但我确实只想在其中包含逗号的几个单元格中引用它们。 有人有想法吗?

【问题讨论】:

    标签: r output double-quotes


    【解决方案1】:

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

    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

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

    【讨论】:

      【解决方案2】:

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

      > 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"
      

      这些应该出现在write.csvquote=FALSE 的输出中。

      【讨论】:

      • 也感谢您的回答。也许将来会对我有所帮助!
      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 2021-06-09
      • 2023-03-14
      • 2022-01-20
      • 2018-07-27
      • 1970-01-01
      相关资源
      最近更新 更多