2010-11-01 75 views
20

我正在尝试读取具有重复行名称但不行的csv文件。我得到的错误信息是Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.读取一个c中带有重复行名称的csv文件R

我使用的代码是:

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) 

任何帮助将不胜感激。

回答

22

功能是看到重复的行名,所以你需要面对这一切。可能最简单的方法是使用row.names = NULL,这将强制行编号 - 换句话说,它将您的第一列视为第一维,而不是行号,因此会添加行号(连续首先是“1”的整数。

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

这就是道格!我看到它已经把我的第一列(dam id)视为你说的第一个维度。我排除了[,-1]位,然后重新命名我的列以照顾已添加的额外一列。非常感谢! – baz 2010-11-01 05:20:27

+2

@Bazon,您的标题没有第一列的名称。如果你给它一个名字,问题就会自动解决。 – VitoshKa 2010-11-01 09:21:07

+0

你好,在row.names = NULL之前不应该有一个逗号,这样脚本就会是:read.csv(“S1N657.csv”,header = T,fill = T,col.names = c(“dam “,”anim“,”temp“),row.names = NULL – baz 2010-11-01 23:22:25

3

试试这个:

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

嗨kohske,工作。你能解释一下该代码的最后一部分:[,-1]吗?非常感谢! – baz 2010-11-01 04:51:32

+0

hi kohske,在运行脚本时,我发现脚本的[,-1]部分删除了行名或我的dam id(did)。 – baz 2010-11-01 04:59:26

+0

是的,你是对的。如果您需要第一列(可能是每行的重复名称),请从上面的代码中删除[,-1]。 – kohske 2010-11-01 05:09:26

2

一个问题我最近是列的标题行中的号码不相符,我在数据本身的列数。例如,我的数据是标签-delimited和所有的数据行都有一个尾随制表符,标题行(我手动添加的)没有。

我希望行是au而是将第一行看作行号。从docs(我强调加):

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

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

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

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

0

猜你的csv文件是一个从xlsx.Add转换逗号第一行结束后,取出最后一行,做

+1

你的回答似乎并没有解决被问的问题,这是低质量的,请考虑制订更 – avalancha 2014-04-16 13:51:11

+0

这一点实际上是有帮助的......正如上面Travis Heeter所解释的,这可能是由于标题中缺少列,如果是这样的话,解决方法是在文本编辑器中打开该文件,在第一行并保存,应该在之后找到。 – 2016-10-12 17:33:21

0

总之,检查列名。如果您的第一行是列的名称,您可能会丢失一个或多个名称。

实施例:

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

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

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