我正在尝试加载一个csv文件,其中有14列如下:
StartDate, var1, var2, var3, ..., var14
当我发出以下命令时:
systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")
我收到一条错误消息。
重复的行.不允许有名称
在我看来,第一个列名是导致问题的原因。当我手动下载文件并从文件中删除StartDate
名称时,R成功读取文件并将第一个列名替换为X
。有人能告诉我这是怎么回事吗?该文件是一个(逗号分隔)csv文件。
8条答案
按热度按时间dsekswqp1#
然后告诉read.table not 使用
row.names
:现在您的行将被简单地编号。
还可以查看
read.csv
,它是read.table
的 Package 器,已经设置了sep=','
和header=TRUE
参数,因此您的调用简化为yhuiod9q2#
This related question指出了
?read.table
文档中解释您的问题的一部分:如果有标题,并且第一行包含的字段比列数少一个,则输入中的第一列用作行名称。否则,如果缺少row.names,则对行进行编号。
您的标题行可能比文件的其余部分少1列,因此
read.table
假定第一列是row.names(必须是唯一的),而不是列(可以包含重复值)。您可以使用以下两种解决方案之一来解决此问题:1.在源文件中标题行的前面或后面添加分隔符(即
\t
或,
),或者1.删除数据中的任何尾随分隔符
具体选择取决于数据的结构。
测试.csv示例:
如果您的test.csv如下所示:
默认情况下,
read.table
将此文件解释为比数据少一个标题列,因为分隔符与不匹配。第一列中的值(没有标题)被解释为行名称:
a1
和b1
。如果此列包含重复值(这是完全可能的),则会得到duplicate 'row.names' are not allowed
错误。如果设置
row.names = FALSE
,则不会发生标题行移位,但标题和数据中的列数仍然不匹配,因为分隔符不匹配。以下是
row.names = FALSE
的解释方式:解决方案1在标题行中添加尾随分隔符:
或者,在标题行中添加前导分隔符:
解决方案2从非标题行中删除多余的尾随分隔符:
sbdsn5lh3#
在我的例子中,每行末尾都有一个逗号,去掉这个逗号就行了
q3qa4bjr4#
我在打开一个CSV文件时遇到了这个错误,其中一个字段中嵌入了逗号。该字段用引号括起来,我剪切并粘贴了其中带有引号=""的read.table。一旦我删除了引号="",read.table的默认行为就会接管并解决这个问题。所以我从这个问题开始:
改为:
bxgwgixi5#
我使用了
readr
package中的read_csv
根据我的经验,如果缺少列名,
read.csv
函数中的参数row.names=NULL
将导致文件阅读错误,即每一列都将被移位。read_csv
解决了这个问题。kgqe7b3p6#
出现此错误的另一个可能原因是重复了整行。如果是这种情况,则可以通过删除重复行来解决问题。
cgh8pdjw7#
@adrianoesch在这里给出的答案(https://stackoverflow.com/a/22408965/2236315)应该会有所帮助(例如,解决了@Frank提出的“如果您知道一个解决方案,不需要您的评论中提到的笨拙的变通方法(移动列名,复制数据),那就太好了。”和“......需要复制数据”)。
注意,如果你在一些文本编辑器中打开,你应该看到标题字段的数量少于标题行下面的列数。在我的例子中,数据集有一个“,”在最后一个标题字段的末尾丢失。
798qvoo88#
看起来这个问题可能有不止一个原因。当我遇到同样的错误时,下面两个步骤起作用了。
1.我将我的文件保存为MS-DOS csv。(早些时候,它被保存为csv,excel starter 2010)。在记事本++中打开csv。没有昏迷不一致(一致性如上所述@Brian)。
1.注意到我没有使用参数sep="",。我使用了它,它工作了(即使这是默认参数!)