我有一个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()
,它可以正常使用
答案 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。 [[
- 函数似乎对两个类都起作用。