将矩阵转换为 R 中的 tibble

Converting a matrix into a tibble in R

如何转换这个矩阵:

> matrix(1:3, nrow = 3, dimnames = list(c("X","Y","Z"), c("A")))
  A
X 1
Y 2
Z 3

进入这个标题:

> tibble::tribble(~group1, ~group2, ~value, "X", "A", 1, "Y", "A", 2, "Z", "A", 3)
# A tibble: 3 × 3
  group1 group2 value
  <chr>  <chr>  <dbl>
1 X      A          1
2 Y      A          2
3 Z      A          3

谢谢

as.tibble可以将矩阵的rownames转为列,然后可以用gather()创建group2列:

library(tidyverse)

m <- matrix(1:3, nrow = 3, dimnames = list(c("X","Y","Z"), c("A")))

newtib <- m %>%
    as.tibble(rownames = "group1") %>%
    gather('A', key = "group2", value = "value")

> newtib
# A tibble: 3 × 3
  group1 group2 value
  <chr>  <chr>  <int>
1 X      A          1
2 Y      A          2
3 Z      A          3

> tibble::tribble(~group1, ~group2, ~value, "X", "A", 1, "Y", "A", 2, "Z", "A", 3)
# A tibble: 3 × 3
  group1 group2 value
  <chr>  <chr>  <dbl>
1 X      A          1
2 Y      A          2
3 Z      A          3

你可以使用-

library(tidyverse)

mat <- matrix(1:3, nrow = 3, dimnames = list(c("X","Y","Z"), c("A")))

mat  %>%
  as.data.frame() %>%
  rownames_to_column(var = 'group1') %>%
  pivot_longer(cols = -group1, names_to = 'group2')

#  group1 group2 value
#  <chr>  <chr>  <dbl>
#1 X      A          1
#2 Y      A          2
#3 Z      A          3
  1. 将矩阵转换为数据框
  2. 将您的行名添加到第 group1
  3. 变异group2
data.frame(matrix) %>% 
  rownames_to_column("group1") %>% 
  mutate(group2 = colnames(matrix)) %>% 
  dplyr::select(group1, group2, value=A)
  group1 group2 value
1      X      A     1
2      Y      A     2
3      Z      A     3

使用 base R 更容易,如果我们转换为 table 并使用 as.data.frame 强制(如果我们需要转换为 tibble - 使用 as_tibble 作为as.data.frame

的包装器
as.data.frame(as.table(m1))
  Var1 Var2 Freq
1    X    A    1
2    Y    A    2
3    Z    A    3

数据

m1 <- matrix(1:3, nrow = 3, dimnames = list(c("X","Y","Z"), c("A")))