将矩阵转换为长格式(R)的数据帧

卡罗琳娜(Karolina Zarzyczny)

我有这种格式的矩阵:

Example_matrix<- structure(list(X1 = c("Species 1", "Species 2", "Species 3", 
"Species 4", "Species 5", "Species 6", "Species 7", "Species 8"
), `Site 1` = c(0, 0, 0, 2, 2, 0, 0, 5), `Site 2` = c(0, 0, 0, 
4, 0, 0, 0, 0), `Site 3` = c(0, 1, 0, 0, 0, 1, 0, 0), `Site 4` = c(0, 
0, 0, 0, 0, 1, 0, 0)), class = c("spec_tbl_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -8L), spec = structure(list(
    cols = list(X1 = structure(list(), class = c("collector_character", 
    "collector")), `Site 1` = structure(list(), class = c("collector_double", 
    "collector")), `Site 2` = structure(list(), class = c("collector_double", 
    "collector")), `Site 3` = structure(list(), class = c("collector_double", 
    "collector")), `Site 4` = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))

(这是它的简化版本)

有没有办法将这样的矩阵快速转换为长格式df?我看了一些类似的问题,但是这些选项对我不起作用。我想要做的就是以df结尾,该df将包含3列:位点,种类和丰度(当前是矩阵中每个单元格中的值)。

谢谢!

阿克伦

我们可以使用pivot_longertidyr

library(dplyr)
library(tidyr)
newdat <- Example_matrix %>% 
    pivot_longer(cols = starts_with('Site'),
          names_to = 'Site', values_to = 'Abundance')

newdat
# A tibble: 32 x 3
#   X1        Site   Abundance
#   <chr>     <chr>      <dbl>
# 1 Species 1 Site 1         0
# 2 Species 1 Site 2         0
# 3 Species 1 Site 3         0
# 4 Species 1 Site 4         0
# 5 Species 2 Site 1         0
# 6 Species 2 Site 2         0
# 7 Species 2 Site 3         1
# 8 Species 2 Site 4         0
# 9 Species 3 Site 1         0
#10 Species 3 Site 2         0
# … with 22 more rows

在中base R,我们可以做

as.data.frame.table(`row.names<-`(as.matrix(Example_matrix)[,-1],
       Example_matrix$X1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章