data.frame into matrix(R),rownames()error

时间:2017-01-09 16:32:53

标签: r csv matrix dataframe

我有一个93 x 28的data.frame(“data.csv”)我想转换成矩阵以便进一步绘图,它看起来像这样:

SYMBOL  BT.20   CAL.51  MDA.MB.436  BT.549
A   3.039   4.908   3.865   3.818
B   4.349   5.399   6.071   5.313
C   7.509   8.091   6.48    6.660
D   3.429   4.394   3.622   3.873
E   3.369   6.716   3.557   3.346

代码

data <- read_csv("data.csv")
rnames <- data[,1]              # assign labels in column 1 to "rnames"  
mat_data <- data.matrix(data[,2:28])  # transform column 2 - end into a matrix
rownames(mat_data) <- rnames                  # assign row names

产生

ERROR: Error in `rownames<-`(`*tmp*`, value = list(SYMBOL = c("A", "B",  : 
  length of 'dimnames' [1] not equal to array extent

第1列没有重复的名称或缺少值

编辑: 改为使用read.csv(),它可以正常使用

1 个答案:

答案 0 :(得分:2)

该错误表示分配给rownames的值是一个列表,其中包含单个向量的列表的“length”是1,而不是向量的长度。我不能说为什么会发生这种情况,因为通常的行为是“[”函数将“单个列”“删除”到原子向量中。和你一样,我希望rnames是一个长度为39的原子向量,但看起来你需要使用它:

rownames(mat_data) <- unlist( rnames )              # assign row names

Rich和Apom的眼睛比我好。 read_csv函数正在生成一个具有与read.csv不同的类和相关提取函数的对象。因为你处于“hadleyverse”,所以你应该使用它:

 rnames <- data[[1]]

tibble - 对象具有与[ - 函数不同的版本,而不是data.frames。 [[ - 函数似乎对两个类都起作用。