Revmove" V"矩阵转换为data.frame

时间:2017-07-05 19:50:04

标签: r matrix dataframe columnname

当矩阵转换为日期框架时,将删除原始列名称,同时将 V1,V2,... 添加为新列名称。

有没有选项可以禁用它?我期望与矩阵中的列名相同,例如1,2。

m <- cbind(1:2, 2:3); m

      [,1] [,2]
[1,]    1    2
[2,]    2    3


as.data.frame(m)   

   V1 V2
1  1  2
2  2  3

2 个答案:

答案 0 :(得分:2)

您说“当矩阵转换为日期框架时,原始列名称将被删除,而V1,V2,...将作为新列名称添加。”

事实并非如此。默认情况下,矩阵没有列名:

> m = matrix(1:4, ncol=2)
> colnames(m)
NULL

但是,数据框必须具有列名。如果未指定它们,则会以各种方式创建它们。例如,如果未在data.frame中指定,则它们从表达式中命名,带有X前缀:

> d = data.frame(1:2,3:4)
> colnames(d)
[1] "X1.2" "X3.4"

或者,当从没有列名的矩阵转换时,它会得到以V为前缀的列号,如下所示:

> colnames(as.data.frame(m))
[1] "V1" "V2"

如果矩阵具有列名称,则它们将由as.data.frame保留:

> colnames(m)=c("First","Second")
> as.data.frame(m)
  First Second
1     1      3
2     2      4

答案 1 :(得分:1)

您似乎混淆了列名和列索引,但如果您确实希望将数字作为列名,则可以将它们转换为字符类。

m <- matrix(c(1, 2, 2, 3), 2)
colnames(m) <- c(1, 2)
rownames(m) <- c(1, 2)
m
#   1 2
# 1 1 2
# 2 2 3

is.character(unlist(dimnames(m)))
# TRUE

ddf <- as.data.frame(m)
ddf
#   1 2
# 1 1 2
# 2 2 3