R 重复';行名称';不允许出现错误
我正在尝试加载一个包含14列的csv文件,如下所示:R 重复';行名称';不允许出现错误,r,csv,r-faq,R,Csv,R Faq,我正在尝试加载一个包含14列的csv文件,如下所示: StartDate, var1, var2, var3, ..., var14 当我发出此命令时: systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",") 系统然后告诉read.table不要使用行名称: systems <- read.table("http://getfile.pl?test.csv",
StartDate, var1, var2, var3, ..., var14
当我发出此命令时:
systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")
系统然后告诉read.table不要使用行名称
:
systems <- read.table("http://getfile.pl?test.csv",
header=TRUE, sep=",", row.names=NULL)
指出说明问题的?read.table
文档的一部分:
如果有一个标题,并且第一行少包含一个字段
如果列数大于列数,则使用输入中的第一列
对于行名称。否则,如果缺少row.names,则对行进行编号
标题行可能比文件的其余部分少1列,因此read.table
假定第一列是row.names(必须是唯一的),而不是列(可以包含重复的值)。您可以使用以下两种解决方案之一解决此问题:
将分隔符(即\t
或,
)添加到源文件标题行的前面或末尾,或
删除数据中的任何尾随分隔符
选择将取决于数据的结构
示例:
此处,由于分隔符不匹配,标题行被解释为比数据少一列:
v1,v2,v3 # 3 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
这是默认情况下的解释方式:
v1,v2,v3 # 3 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
第一列(无标题)值被解释为行名称:a1
和b1
。如果此列包含完全可能的重复项,则会出现duplicate'行。不允许出现错误
如果设置了row.names=FALSE
,则不会发生移位,但由于分隔符不匹配,标题和数据中的项目数仍然不匹配
解决方案1
将尾部分隔符添加到标题:
v1,v2,v3, # 4 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
解决方案2
从非标题行中删除多余的尾随分隔符:
v1,v2,v3 # 3 items
a1,a2,a3 # 3 items!!
b1,b2,b3 # 3 items!!
这个问题似乎有不止一个原因。当我遇到同样的错误时,以下两个步骤奏效了
我将文件保存为MS-DOS csv。(早些时候,它被保存为csv格式,excel starter 2010)。
在记事本++中打开csv。无昏迷不一致(一致性如上@Brian所述)李>
注意到我没有使用参数sep=“,”。我使用了它,它工作正常(即使这是默认参数!)
@adrianoesch在这里给出的答案()应该会有所帮助(例如,解决了“如果您知道一个解决方案不需要您的评论中提到的笨拙的变通方法(改变列名,复制数据),那就太好了。”以及@Frank提出的“…需要复制数据”)
请注意,如果在某些文本编辑器中打开,您应该会看到标题字段的数量小于标题行下方的列数。在我的例子中,数据集在最后一个标题字段的末尾缺少“,” 此错误的另一个可能原因是复制了整行。如果是这样的话,可以通过删除重复的行来解决问题。我在打开CSV文件时遇到了这个错误,其中一个字段中嵌入了逗号。该字段周围有引号,我剪切并粘贴了read.table,其中有quote=”“。一旦我取出quote=“”,read.table的默认行为就接管并解决了问题。所以我从这里开始:
systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")
systems在我的例子中,每行末尾都有一个逗号。通过删除有效的我从readr
中使用了read\u csv
根据我的经验,read.csv
函数中的参数row.names=NULL
将导致错误读取
如果缺少列名,即每一列都将被移位
read\u csv
解决了这个问题。该链接()似乎不起作用。您是否可以将文件的前几行复制粘贴到问题中,或者提供一个工作链接?这只是一个示例。链接是内部的,你将无法访问它。文件格式如下:date、var1、var2、var3、var4、var5然后填充一些数据。我可以打开文件,这是正确的。这个问题不再与(1)它的标题或(2)下面的答案有关@minitech刚刚打电话给你,说你是上一次编辑的作者,在问题发布后仅仅四个小时……也许你知道如何挽救这个吸引了2万人浏览的问题。@Frank:哇,谢谢!回滚。您的最终代码块上的是read.csv而不是read.table吗?我以前尝试过,但没有成功。第一列现在称为“row.names”,列名称移动了一个单元格further@Tyler:是的,正在修理。谢谢“现在您的行将被简单地编号”并不是完整的故事。正如你的评论所表明的那样,列名也被搞砸了。如果您知道一个解决方案,它不需要您的评论中提到的笨拙的解决方法(移动列名,复制数据),那就太好了。(不幸的是,“修复你的源数据”对于我的案例来说是不够的——这不存在OP的问题,它遵循记录的行为。也许有一天我会把我的案例变成一个可复制的例子。)OP已经知道如何避免错误。事实上,您的答案不如他之前所做的,因为它会生成一个额外的列,要求复制数据。(我写错了,它只是把列名弄乱了。)
systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")
systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")