将数据帧转换为矩阵,其中第1列为df,作为矩阵的rownames

Mat*_*hew 2 r matrix dataframe

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

我想将数据帧转换为矩阵,并使用现有数据帧的第1列作为新矩阵的rownames,并将数据帧的列名维护为矩阵的列名.

我还希望将此过程自动化,以便与类似但不同维度的数据框架一起使用.因此,如果解决方案需要知道行数和/或列数,那么如何在不必查看监视器的情况下将此信息输入代码中?

我看过data.matrix和reshape2,但似乎无法弄清楚如何做我想要的.

MrF*_*ick 12

使用您的示例数据

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")
Run Code Online (Sandbox Code Playgroud)

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

matrix.please<-function(x) {
    m<-as.matrix(x[,-1])
    rownames(m)<-x[,1]
    m
}
Run Code Online (Sandbox Code Playgroud)

你会喜欢它

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"
Run Code Online (Sandbox Code Playgroud)

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