我正在尝试加载一个包含14列的csv文件:
StartDate, var1, var2, var3, ..., var14
当我发出此命令时:
systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")
我收到错误消息。
不允许重复的row.names
在我看来,第一个列名称导致了问题。当我手动下载文件并从文件中删除StartDate
名称时,R成功读取文件并用X
替换第一个列名称。有人能告诉我发生了什么事吗?该文件是(逗号分隔的)csv文件。
答案 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(必须都是唯一的),而不是列(可以包含重复的值) 。您可以通过
\t
或,
),或者选择取决于数据的结构
示例:此处标题的列数少一个:
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)
似乎问题可能源于多个原因。当我遇到同样的错误时,遵循两个步骤。
答案 4 :(得分:0)
@adrianoesch的答案(https://stackoverflow.com/a/22408965/2236315)应该有所帮助(例如,解决&#34;如果你知道一个解决方案不需要你的评论中提到的笨拙的解决方法(转移列名,复制数据),这将是伟大的。&#34;和&#34; ...要求复制数据&#34;由@Frank提出)。
请注意,如果在某个文本编辑器中打开,您应该看到标题字段的数量小于标题行下面的列数。在我的例子中,数据集有一个&#34;,&#34;丢失在最后一个标题字段的末尾。
答案 5 :(得分:0)
此错误的另一个可能原因是您重复了整行。如果是这种情况,则通过删除重复的行来解决问题。
答案 6 :(得分:0)
在我的案例中,每行末尾都有一个逗号。通过删除那个工作
答案 7 :(得分:0)
我使用了read_csv
package的readr
根据我的经验,row.names=NULL
函数中的参数read.csv
会导致错误地读取
缺少列名的文件,即每列都会移位。
read_csv
解决了这个问题。