我有这种格式的矩阵:
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_longer
从tidyr
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] 删除。
我来说两句