我想将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中避免这个最终的换行?
答案 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")