在R中读取带有重复行名的csv文件

时间:2010-11-01 04:19:13

标签: r row names

我正在尝试读取带有重复行名的csv文件,但却无法读取。我收到的错误消息是Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

我使用的代码是:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"))

我的数据示例如下:

did <- c("1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657")
aid <- c(101,102,103,104,105,106,107,108,109,110)
temp <- c(36,38,37,39,35,37,36,34,39,38)

data <- cbind(did,aid,temp)

任何帮助将不胜感激。

7 个答案:

答案 0 :(得分:29)

该函数看到重复的行名称,因此您需要处理它。可能最简单的方法是使用 row.names = NULL ,这会强制进行行编号 - 换句话说,它会将您的第一列视为第一个维度,而不是行号,因此添加行号(以“1”开头的连续整数。

read.csv("S1N657.csv", header=T,fill=T, col.names=c("dam","anim","temp"), row.names=NULL)

答案 1 :(得分:3)

试试这个:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"), 
          row.names = NULL)[,-1]

答案 2 :(得分:2)

我最近遇到的一个问题是标题行中的列数与我在数据本身中的列数不匹配。例如,我的数据以制表符分隔,并且所有数据行都有一个尾随制表符。标题行(我手动添加)没有。

我希望这些行能够自动编号,而是将第一行视为行名称。从文档(我强调):

  

row.names行名称向量。这可以是给出实际行名称的向量,或者是给出包含行名称的表的列的单个数字,或者是给出包含行名称的表列名称的字符串。

     

如果存在标题且第一行包含的字段少于列数,则输入中的第一列用于行名称。否则,如果缺少row.names,行将被编号。

     

使用row.names = NULL强制进行行编号。缺少或NULL row.names生成被认为是“自动”的行名(并且不会被as.matrix保留)。

在标题行中添加额外的制表符,使得标题行与数据行具有相同的列数,从而解决了问题。

答案 3 :(得分:1)

猜测你的csv文件是从xlsx转换而来的。将逗号添加到第一行的末尾,删除最后一行,完成

答案 4 :(得分:1)

对于小型CSV,我收到相同的“不允许重复的“ row.names””错误。问题是我想在14x14图表区域之外的某个地方有一个随机的单元格,上面有空格/其他数据。

当我运行它“ row.names = NULL”时发现了答案,并且我的表下方有多行空白数据(因此,多个重复的行名全为“ blank”)。

解决方案是删除表区域之外的所有行/列,并且行得通!

答案 5 :(得分:0)

简而言之,检查您的专栏名称。如果您的第一行是列的名称,则可能缺少一个或多个名称。

示例:

"a","b","c"
a,b,c,d
a,b,c,d

上面的示例将导致row.name错误,因为每行有4个值,但只有3列被命名。

当我从在线资源构建csv时,这发生在我身上。

答案 6 :(得分:0)

就我而言,问题来自excel文件。尽管它看上去组织得很好,但它没有用,并且我总是收到以下消息:Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

我试图将我的excel矩阵复制粘贴到一个新的空excel表中,但我尝试阅读它:它起作用了!不再有错误消息!