R中'read.csv'和'write.csv'之间的不一致

时间:2014-08-22 01:33:02

标签: r

R函数read.csv的工作原理如下:"如果有一个标题,第一行包含的字段少于列数,则输入的第一列用于行名称。"这很好。但是,当涉及函数write.csv时,我找不到以类似方式编写csv文件的方法。所以,如果我有file.txt如下:

Column_1,Column_2
Row_1,2,3
Row_2,4,5

然后,当我使用a = read.csv('file.txt')阅读时,行和列名称按预期为Row_xColumn_x。但是,当我再次将矩阵a写入csv文件时,我从write.csv('file2.txt', quote=F)得到的结果如下:

,Column_1,Column_2
Row_1,2,3
Row_2,4,5

因此,此文件的开头有一个逗号。如果我使用a2 = read.csv('file2.txt')再次阅读此文件,则结果a2将与之前的矩阵a不同。矩阵a2的行名称不是Row_x。那,我不想在文件的开头有一个逗号。如何在使用write.csv时删除此逗号?

1 个答案:

答案 0 :(得分:3)

您提到的两个函数read.cvs和write.csv只是更通用函数read.table和write.table的特定形式。

当我将示例数据复制到.csv并尝试使用read.csv读取时,R会发出警告并说标题行不完整。因此,它采取特殊行为来修复错误。因为我们有一个不完整的文件,它通过在左上角添加一个空元素来完成该文件。 R理解这是一个标题行,因此数据在R中显示正常,但是当我们写入csv时,它并不理解标题是什么,什么不是。因此,仅出现在由R创建的标题行中的空元素显示为常规元素。你会期待的。基本上它使我们的表变成了3x3,因为它不能有一些奇怪的元素。

你想要额外的逗号,因为它允许程序在正确的位置读取列名。为了再次读取文件,您可以执行以下操作,假设test.csv是您的数据。您可以通过在R中手动添加列名和行名来解决此问题,包括将所有内容放在适当位置的缺失元素。

要修复不稳定的行名称,您需要添加一个额外的选项,指定当您使用逗号正确读回时,哪一行是行名称(row.names = your_column_number)。

y <- read.csv(file = "foo.csv") #this throws a warning because your input is incorrect
write.csv(y, "foo_out.csv")
x <- read.csv(file = "foo.csv", header = T, row.names = 1) #this will read the first column as the row names.  

使用read / write.csv,但是进入更通用的函数read.table和write.table可能是值得的。它们提供扩展功能。

读取通用函数中的csv

y <- read.table(file = "foo.csv", sep = ",", header = TRUE)

因此您可以指定分隔符并轻松读取excel电子表格(由制表符或&#34; \ t&#34;分隔)或空格分隔文件(&#34;&#34;)。

希望有所帮助。