将 tibble 传播为具有行名称的矩阵

Spread tibble as matrix with row names

我想传播 tibble 作为矩阵,第一列作为行名,如下所示:

必需

        E1         E2
G1  0.5855288 -1.8179560
G2  0.7094660  0.6300986
G3 -0.1093033 -0.2761841
G4 -0.4534972 -0.2841597
G5  0.6058875 -0.9193220

获得

到目前为止得到以下

            E1         E2
[1,]  0.5855288 -1.8179560
[2,]  0.7094660  0.6300986
[3,] -0.1093033 -0.2761841
[4,] -0.4534972 -0.2841597
[5,]  0.6058875 -0.9193220

最小工作示例

使用给定的代码

set.seed(12345)
Y   <- rnorm(10)
Env <- paste0("E", rep(1:2, each = 5))
Gen <- paste0("G", rep(1:5, times = 2))
df1 <- data.frame(Y, Env, Gen)

library(magrittr)
library(tidyverse)

df1 %>%
  tidyr::spread(key =  Env, value = Y) %>%
  dplyr::ungroup() %>%
  dplyr::select(-Gen) %>%
  as.matrix()

由于我们使用的是 magrittr,因此选项为 set_rownames

library(tidyverse)
df1 %>% 
  spread(Env, Y)  %>%
  set_rownames(.$Gen) %>%
  select(-Gen) %>%
  as.matrix
#           E1         E2
#G1  0.5855288 -1.8179560
#G2  0.7094660  0.6300986
#G3 -0.1093033 -0.2761841
#G4 -0.4534972 -0.2841597
#G5  0.6058875 -0.9193220

也可以用 acast 来自 reshape2

library(reshape2)
acast(df1, Gen~Env, value.var = "Y")