2014-10-01 278 views
26

我试图创建csv文件的元素的情节,看起来像这样:参数意味着,不同的行数:8,20

h1,h2,h3,h4 
a,1,0,1,0 
b,1,1,0,1 
c,0,0,1,0 

我尝试下面的代码,但我收到一个错误说

Error in data.frame(id = varieties, attr(mat, "row.names"), check.rows = FALSE) : 
    arguments imply differing number of rows: 8, 20 

我的示例数据有8列和20行(不包括标题和行名称)。我试图在网上查找并尝试实施一些修复程序,但问题仍然存在。我非常感谢任何帮助。

mat <- read.csv("trial.csv", header=T, row.names=1) 
varieties = names(mat) 
df <- data.frame(id=varieties,attr(mat, "row.names"), check.rows= FALSE) 
+0

哪一行会引发错误?您是否可以逐行运行脚本并报告结果?是否可以共享文件? – 2014-10-01 17:59:06

+0

@MylesBaker'df < - data.frame(id = variety,attr(mat,“row.names”),check.rows = FALSE)'给出错误。 – abn 2014-10-01 18:00:45

+1

只有'mat'是一个方形矩阵(nrows = ncols),这才会起作用。你想实现什么?也许一个'list'更适合你的需求......或者看看'cbind.fill' [这里](http://stackoverflow.com/questions/7962267/cbind-a-df-with-an-empty-df -cbind-fill) – EDi 2014-10-01 18:10:53

回答

23

您的data.frame mat是矩形的(n_rows!= n_cols)。

因此,您不能将data.frame作为列和rownames之外的列,因为data.frame中的每列必须具有相同的长度。

也许这就够你的需求:

require(reshape2) 
mat$id <- rownames(mat) 
melt(mat) 
6

我有同样的错误信息,所以我去谷歌上搜索了一下,我设法用下面的代码修复它。

df<-data.frame(words = unlist(words)) 

单词是一个字符列表。

这是为了防止其他人需要输出为数据帧。

相关问题