当没有列名的矩阵转换为数据时,删除列名中的“V”字母,frame [关闭]

ct3nt3jp  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(82)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
5年前关闭。
Improve this question
将矩阵转换为日期框架时,将删除原始列名,同时添加**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
mfpqipee

mfpqipee1#

你说“当一个矩阵转换成一个日期框架时,原始的列名被删除,而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
icnyk63a

icnyk63a2#

你似乎混淆了列名和列索引,但是如果你真的想用数字作为列名,它们将被转换为字符类。

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

相关问题