重复'row.names'是不允许的错误

时间:2012-01-13 16:41:46

标签: r csv r-faq

我正在尝试加载一个包含14列的csv文件:

StartDate, var1, var2, var3, ..., var14

当我发出此命令时:

systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")

我收到错误消息。

  

不允许重复的row.names

在我看来,第一个列名称导致了问题。当我手动下载文件并从文件中删除StartDate名称时,R成功读取文件并用X替换第一个列名称。有人能告诉我发生了什么事吗?该文件是(逗号分隔的)csv文件。

8 个答案:

答案 0 :(得分:87)

然后告诉read.table 使用row.names

systems <- read.table("http://getfile.pl?test.csv", 
                      header=TRUE, sep=",", row.names=NULL)

现在您的行只会被编号。

另请查看read.csv这是read.table的包装器,它已设置sep=','header=TRUE参数,以便您的调用简化为

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)

答案 1 :(得分:33)

This related question指出了解释您问题的?read.table文档的一部分:

  

如果有标题,第一行包含少一个字段   比列数,使用输入中的第一列   对于行名称。否则,如果缺少row.names,则对行进行编号。

您的标题行可能比文件的其余部分少1列,因此read.table假定第一列是rownames(必须都是唯一的),而不是列(可以包含重复的值) 。您可以通过

解决此问题
  1. 在源文件的标题行的前端或末尾添加分隔符(即\t,),或者
  2. 删除数据中的所有尾随分隔符
  3. 选择取决于数据的结构

    示例:此处标题的列数少一个:

    v1,v2,v3    # 3 items
    a,a,a,      # 4 items
    b,b,b,      # 4 items
    

    在标题中添加尾随分隔符:

    v1,v2,v3,   # 4 items
    a,a,a,      # 4 items
    b,b,b,      # 4 items
    

    从行中删除多余的尾随分隔符:

    v1,v2,v3    # 3 items
    a,a,a       # 3 items
    b,b,b       # 3 items
    

答案 2 :(得分:1)

打开CSV文件时出现此错误,其中一个字段中嵌入了逗号。该字段有引号,我已经剪切并粘贴read.table与quote =&#34;&#34;在里面。一旦我接受了引用=&#34;&#34; out,read.table的默认行为接管并杀死了问题。所以我离开了这个:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")

到此:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")

答案 3 :(得分:0)

似乎问题可能源于多个原因。当我遇到同样的错误时,遵循两个步骤。

  1. 我将文件保存为MS-DOS csv。 (之前它仅作为csv保存,excel starter 2010)。 在记事本++中打开csv。没有昏迷不一致(如上所述@Brian的一致性)。
  2. 注意到我没有使用参数 sep =“,”。我使用它并且它起作用(即使这是默认参数!)

答案 4 :(得分:0)

@adrianoesch的答案(https://stackoverflow.com/a/22408965/2236315)应该有所帮助(例如,解决&#34;如果你知道一个解决方案不需要你的评论中提到的笨拙的解决方法(转移列名,复制数据),这将是伟大的。&#34;和&#34; ...要求复制数据&#34;由@Frank提出)。

请注意,如果在某个文本编辑器中打开,您应该看到标题字段的数量小于标题行下面的列数。在我的例子中,数据集有一个&#34;,&#34;丢失在最后一个标题字段的末尾。

答案 5 :(得分:0)

此错误的另一个可能原因是您重复了整行。如果是这种情况,则通过删除重复的行来解决问题。

答案 6 :(得分:0)

在我的案例中,每行末尾都有一个逗号。通过删除那个工作

答案 7 :(得分:0)

我使用了read_csv packagereadr

根据我的经验,row.names=NULL函数中的参数read.csv会导致错误地读取 缺少列名的文件,即每列都会移位。

read_csv解决了这个问题。