此相关问题指出了?read.table
说明您的问题的文档的一部分:
如果有标题,并且第一行包含的字段少于列数,则输入中的第一列用作行名。否则,如果缺少row.names,则会对行进行编号。
标题行的列可能比文件的其余部分少1列,因此read.table
假定第一列是row.names(必须全部唯一),而不是列(可以包含重复值)。您可以使用以下两个解决方案之一来解决此问题:
- 添加定界符(即
\t
或,
在源文件中标题行的开头或结尾),或者
- 删除数据中的任何结尾定界符
选择将取决于数据的结构。
示例:
在这里,标题行被解释为比数据少一列,因为分隔符不匹配:
v1,v2,v3
a1,a2,a3,
b1,b2,b3,
这是默认情况下的解释方式:
v1,v2,v3
a1,a2,a3,
b1,b2,b3,
第一列(无标题)的值解释为row.names:a1
和b1
。如果此列包含重复项(完全有可能),那么您将获得duplicate 'row.names' are not allowed
错误消息。
如果设置row.names = FALSE
,则不会发生移位,但是由于分隔符不匹配,因此标题和数据中的项目数量仍然不匹配。
解决方案1
在标头中添加尾随定界符:
v1,v2,v3,
a1,a2,a3,
b1,b2,b3,
解决方案2
从非标头行中删除多余的尾部定界符:
v1,v2,v3
a1,a2,a3
b1,b2,b3