如何从write.table创建的CSV文件中删除尾随空白或换行符?

时间:2014-07-30 12:39:54

标签: r csv

我想将R中的数据帧写入CSV文件。考虑以下玩具示例

df <- data.frame(ID = c(1,2,3), X = c("a", "b", "c"), Y = c(1,2,NA))
df[which(is.na(df[,"Y"])), 1]

write.table(t(df), file = "path to CSV/test.csv", sep = ""), col.names=F, sep=",", quote=F)

test.csv中的输出如下所示

ID,1,2,3
X,a,b,c
Y, 1, 2,NA

乍一看,这正是我所需要的,但在上面的代码插入中无法看到的是,在最后一行的NA之后,还有另一个换行符。但是,当我将test.csv传递到网站上的Javascript图表时,结尾的换行会造成麻烦。

有没有办法在R中避免这个最终的换行?

3 个答案:

答案 0 :(得分:3)

这有点令人费解,但获得了您想要的结果:

zz <- textConnection("foo", "w")
write.table(t(df), file = zz, col.names=F, sep=",", quote=F)
close(zz)
foo
# [1] "ID,1,2,3"   "X,a,b,c"    "Y, 1, 2,NA"
cat(paste(foo, collapse='\n'), file = 'test.csv', sep='')

您应该只在前两个数据行之后使用具有换行符的文件。

答案 1 :(得分:3)

您可以使用命令行实用程序(如sed)从文件中删除尾随空格:

sed -e :a -e 's/^.\{1,77\}$/ & /;ta'

或者,您可以先编写一行,然后使用append

答案 2 :(得分:0)

@Thomas答案的类似方式,但输入略少。将输出从write.csv发送到字符串(capture.out)。连接字符串(paste)并使用换行符(collapse = \n)分隔元素。使用cat写入文件。

x <- capture.output(write.csv(df, row.names = FALSE, quote = FALSE))
cat(paste(x, collapse = "\n"), file = "df.csv") 

您还可以使用包format_csv中的readr来创建包含换行符(\n)的字符向量。使用\n删除最后一行substr。使用cat写入文件。

library(readr)
x <- format_csv(df)
cat(substr(x, 1, nchar(x) - 1), file = "df.csv")