在R编程中不允许重复'row.names'错误

我想加载一个有这样的14列的CSV文件:

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

当我发出这个命令:

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

我得到“重复的row.names是不允许的错误消息”。

在我看来,第一列名称是造成这个问题。 当我手动下载文件并从文件中删除StartDate名称时,R成功读取文件并用Xreplace第一个列名。有人可以告诉我发生了什么事吗? 该文件是一个逗号分隔的CSV文件。

然后告诉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) 

看到这个相关的职位 。

您的标题行可能比文件的其余部分less1列。 你可以通过解决这个问题

  1. 在源文件的标题行的末尾添加一个分隔符,或者,
  2. 删除数据中的任何尾随的定界符

例如标题有一个较less的列:

V1,V2,V3
A,A,A,
B,B,B,

例如添加尾部的分隔符到头部:

V1,V2,V3,
A,A,A,
B,B,B,

看起来这个问题可能来自多个原因。 以下两个步骤工作时,我有相同的错误。 1.我将我的文件保存为MS-DOS csv。 (早些时候它被保存在只是csv,2010年Excel初学者)。 在记事本++中打开csv。 没有昏迷是不一致的(一致性如上所述@Brian)。
注意到我没有使用参数sep =“,” 。 我用它,它的工作(即使这是默认的参数!)

由于上述讨论的意见不够,我无法发表,但我发现这个讨论很难阅读和解决scheme难以实施。 不过,@adrianoesch的答案( https://stackoverflow.com/a/22408965/2236315 )应该有帮助(例如,解决“如果你知道一个解决scheme,不需要在你的评论中提到的尴尬的解决方法(shift列名,复制数据),这将是伟大的。“和”…要求数据被复制“@Frank提出)。

请注意,如果您在某些文本编辑器中打开,则应该看到标题字段的数量less于标题行之下的列数。 在我的情况下,数据集有一个“,”在最后的标题字段的末尾丢失。

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

你可以在Excel中打开并保存在那里。 它会重新格式化CSV,所以它的工作。

这里也有类似的问题。 通过使用以下函数,在包含因子variables(名义/有序types)的数据框中,通过将每个variables的所有这些比率表转换为数据框,结果得到第一列包含重复名称的dataframe。

这些名字不能转化为因素,为了留住他们? 这怎么可能发生? 这可能是解决这个问题的方法! 🙂

 tblFun <- function(x){ tbl <- table(x) res <- cbind(tbl,round(prop.table(tbl)*100,2)) colnames(res) <- c('Count','Percentage') res } do.call(rbind,lapply(df,tblFun)) 

示例df:

 Agree 413 77.34 Disagree 27 5.06 Dont know 16 3.00 Agree 505 94.57 Disagree 13 2.43 Dont know 0 0.00 

诚挚的,Elias“Estatistics”Tsolis

不pipe是read.csv还是read.table,在读取文件时都要使row.names = NULL。 它应该工作。 它以同样的方式为我工作。