Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重复';行名称';不允许出现错误_R_Csv_R Faq - Fatal编程技术网

R 重复';行名称';不允许出现错误

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",

我正在尝试加载一个包含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", 
                      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=",")