【问题标题】:creating a vector from a matrix [duplicate]从矩阵创建向量[重复]
【发布时间】:2021-08-08 06:28:20
【问题描述】:

我有一个这样的 8 x 3 矩阵:

  A B C
1 1 1 1
2 1 1 2
3 1 2 1
4 1 2 2
5 2 1 1
6 2 1 2
7 2 2 1
8 2 2 2

我想从这个矩阵中创建一个列向量,如下所示:

cell
111
112
121
122
211
212
221
222

这意味着将所有 3 列转换为一列。我怎样才能做到这一点?代码是什么?

【问题讨论】:

  • 数字会更好!

标签: r cat


【解决方案1】:

我们可以使用paste

data.frame(cell = as.integer(do.call(paste0, df1)))

-输出

#  cell
#1  111
#2  112
#3  121
#4  122
#5  211
#6  212
#7  221
#8  222

注意:在可重现的示例中,我们使用 data.frame 作为输入。如果是matrix,则使用as.data.frame 转换为data.frame 并应用相同的代码


或使用unite

library(tidyr)
library(dplyr)
unite(df1, cell, everything(), sep="") %>%
    type.convert(as.is = TRUE)

数据

df1 <- structure(list(A = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), B = c(1L, 
1L, 2L, 2L, 1L, 1L, 2L, 2L), C = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L)), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6", "7", "8"))

【讨论】:

    【解决方案2】:

    使用矩阵乘法如下:

    m %*% 10^(2:0)
    

    给予:

      [,1]
    1  111
    2  112
    3  121
    4  122
    5  211
    6  212
    7  221
    8  222
    

    注意

    m 以可重现的形式:

    Lines <- "
      A B C
    1 1 1 1
    2 1 1 2
    3 1 2 1
    4 1 2 2
    5 2 1 1
    6 2 1 2
    7 2 2 1
    8 2 2 2"
    m <- as.matrix(read.table(text = Lines))
    

    【讨论】:

    • 为什么要使用 10^(2:0)?
    • 它给出 c(100,10,1) 而不写出来。
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多