【问题标题】:Keep rownames when converting matrix to data frame将矩阵转换为数据框时保留行名
【发布时间】:2018-07-15 11:42:17
【问题描述】:

我想将矩阵转换为数据框。当我使用

df <- mat %>% data.frame()

我丢失了行名。我该如何保留它们?

【问题讨论】:

  • 试试mat %&gt;% as.data.frame %&gt;% cbind(rn = row.names(mat), .) BTW,data.frame 保持行名不变。如果你使用data_frame,它会去掉那些。
  • 我无法重现该问题:mat &lt;- matrix(1:10, nrow = 2, dimnames = list(letters[1:2], letters[1:5])); data.frame(mat) 对我来说很好
  • @akrun - cbind 不会再次将其全部转换回矩阵吗?我认为只需要as.data.frame(mat)
  • @dww 它不会'因为cbind 正在使用行名对data.frame 进行cbind,在这里它调度cbind.data.frame 我建议它以防OP 使用tidyverse 执行此类操作行名将在此过程中丢失
  • @user42485 您可以在这里查看区别as.data.frame(mat, ind = 5)data.frame(mat, ind = 5) 前者不会创建新列

标签: r dataframe matrix rowname


【解决方案1】:

这就是我喜欢的方式:

myDF &lt;- data.frame(columnNameILike = row.names(myMatrix), myMatrix)

它只是有一点优势,你可以为 row.names 命名你喜欢的名字。

例子:

mat = matrix(c(1,2,3,2,3,4))
row.names(mat) = c("one","two","three","frour","frive","six")
df = data.frame(columnNameILike = row.names(mat), mat)

【讨论】:

  • data.frame(your_matrix) 已经保留了行名,但是如果您想为同一行中的行名创建一个特殊列,这是一个很好的技巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2023-03-10
相关资源
最近更新 更多