如何有条件地删除 R 中 write.csv 中的双引号
how to conditional remove double quotes in write.csv in R
我有包含数字和字符值的数据,分隔符是逗号。但是在某些字符值中,也有逗号。
当我输出为 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)
但我只想引用其中有逗号的几个单元格。
有人有想法吗?
我认为您可以使用 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
:
Values are only quoted if needed: if they contain a comma, quote or
newline.
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.csv
和 quote=FALSE
的输出中。
我有包含数字和字符值的数据,分隔符是逗号。但是在某些字符值中,也有逗号。 当我输出为 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)
但我只想引用其中有逗号的几个单元格。 有人有想法吗?
我认为您可以使用 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
:
Values are only quoted if needed: if they contain a comma, quote or newline.
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.csv
和 quote=FALSE
的输出中。