【问题标题】:convert data frame to a matrix with column 1 of df as rownames of matrix将数据框转换为矩阵,其中 df 的第 1 列作为矩阵的行名
【发布时间】:2014-10-30 22:00:34
【问题描述】:

我有一个尺寸为 3695 X 20 的数据框。第一列包含字母数字标识符,其他 19 列都是数字。因此,rownames(df) 提供了数字 1-3695,而 colnames(df) 提供了列的名称。 df[,1] 提供字母数字标识符。

我想将数据框转换为矩阵,并使用现有数据框的第 1 列作为新矩阵的行名,并将数据框的列名保持为矩阵的列名。

我还希望将此过程自动化,以用于类似但不同维度的数据框。因此,如果解决此问题需要知道行数和/或列数,我怎样才能将这些信息放入代码中而无需查看监视器?

我查看了 data.matrix 和 reshape2,但似乎无法弄清楚如何做我想做的事。

【问题讨论】:

  • 等你说第一列包含标识符,还有rownames(df)标识符。没有相同的东西。 rownames() 不存储为列,它们存储为属性。那么你的数据是怎么回事?您是否只是复制了信息。你真的应该添加一个reproducible example 来明确你的输入是什么以及你想要的输出是什么。如果这是唯一的问题,您可以使用 dim()nrow()ncol() 来获取 data.frame 的尺寸。
  • 对不起,我错了,rownames(df) 只是一个数字列表; 1-3695.
  • 如果你的问题有错误,你应该编辑它。同样,如果没有可重复的示例来回答并不有趣,因为我们最终会浪费大量时间来创建一个示例,而我们的示例可能会或可能不会真正匹配您的数据。见how to ask a good question
  • 为简单起见,这里是我的较大数据框的 4 X 4 更简单的版本: structure(list(gene = c("AT1G01040", "AT1G01270", "AT1G01471", "AT1G01680") , log2.fold_change._Mer7_2.1_Mer7_2.2 = c(0, 0, 0, 0), log2.fold_change._Mer7_1.2_W29_S226A_1 = c(0, 0, -1.14, 0), log2.fold_change._Mer7_1.2_W29_1 = c(0, 0, 0, 0)), .Names = c("基因", "log2.fold_change._Mer7_2.1_Mer7_2.2", "log2.fold_change._Mer7_1.2_W29_S226A_1", "log2.fold_change._Mer7_1。 2_W29_1"), row.names = c(NA, 4L), class= "data.frame")

标签: r matrix dataframe


【解决方案1】:

使用您的示例数据

X<-structure(list(gene = c("AT1G01040", "AT1G01270", "AT1G01471", "AT1G01680"), log2.fold_change._Mer7_2.1_Mer7_2.2 = c(0, 0, 0, 0), log2.fold_change._Mer7_1.2_W29_S226A_1 = c(0, 0, -1.14, 0 ), log2.fold_change._Mer7_1.2_W29_1 = c(0, 0, 0, 0)), .Names = c("gene", "log2.fold_change._Mer7_2.1_Mer7_2.2", "log2.fold_change._Mer7_1.2_W29_S226A_1", "log2.fold_change._Mer7_1.2_W29_1"), row.names = c(NA, 4L), class = "data.frame")

您可以编写一个简单的辅助函数来创建矩阵并设置正确的名称

matrix.please<-function(x) {
    m<-as.matrix(x[,-1])
    rownames(m)<-x[,1]
    m
}

你会像这样使用它

M <- matrix.please(X)
str(M)
#  num [1:4, 1:3] 0 0 0 0 0 0 -1.14 0 0 0 ...
#  - attr(*, "dimnames")=List of 2
#   ..$ : chr [1:4] "AT1G01040" "AT1G01270" "AT1G01471" "AT1G01680"
#   ..$ : chr [1:3] "log2.fold_change._Mer7_2.1_Mer7_2.2"  
# "log2.fold_change._Mer7_1.2_W29_S226A_1" "log2.fold_change._Mer7_1.2_W29_1"

所以我们有一个 4x3 矩阵,其中包含正确的行名和列名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2023-01-11
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多