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_x
和Column_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
时删除此逗号?
答案 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;)。
希望有所帮助。