R 如何将我的列数据转换为社区矩阵
我有两列数据,群落数量和物种R 如何将我的列数据转换为社区矩阵,r,matrix,formatting,R,Matrix,Formatting,我有两列数据,群落数量和物种 com <- paste(c("1", "1", "1", "1", "2", "2", "3","3","3", "4", "4", "5", "5")) species <- paste(c(&
com <- paste(c("1", "1", "1", "1", "2", "2", "3","3","3", "4", "4", "5", "5"))
species <- paste(c("sp1", "sp1", "sp2", "sp4", "sp3", "sp1", "sp5", "sp2","sp2", "sp3","sp3", "sp5", "sp1" ))
data <- as.data.frame(cbind(com, species))
data
com species
1 sp1
1 sp1
1 sp2
1 sp4
2 sp3
2 sp1
3 sp5
3 sp2
3 sp2
4 sp3
4 sp3
5 sp5
5 sp1
提前谢谢 我建议采用
tidyverse
这样的方法重塑数据:
library(tidyverse)
#Data
com <- paste(c("1", "1", "1", "1", "2", "2", "3","3","3", "4", "4", "5", "5"))
species <- paste(c("sp1", "sp1", "sp2", "sp4", "sp3", "sp1", "sp5", "sp2","sp2", "sp3","sp3", "sp5", "sp1" ))
data <- as.data.frame(cbind(com, species))
#Reshape
data %>% pivot_longer(cols = -com) %>%
group_by(com,value) %>% summarise(N=n()) %>%
pivot_wider(names_from = value, values_from=N) %>%
replace(is.na(.),0)
输出:
# A tibble: 5 x 6
# Groups: com [5]
com sp1 sp2 sp4 sp3 sp5
<fct> <int> <int> <int> <int> <int>
1 1 2 1 1 0 0
2 2 1 0 0 1 0
3 3 0 2 0 0 1
4 4 0 0 0 2 0
5 5 1 0 0 0 1
# A tibble: 5 x 6
# Groups: com [5]
com sp1 sp2 sp3 sp4 sp5
<fct> <int> <int> <int> <int> <int>
1 1 2 1 0 1 0
2 2 1 0 1 0 0
3 3 0 2 0 0 1
4 4 0 0 2 0 0
5 5 1 0 0 0 1
#一个tible:5 x 6
#组别:com[5]
com sp1 sp2 sp3 sp4 sp5
1 1 2 1 0 1 0
2 2 1 0 1 0 0
3 3 0 2 0 0 1
4 4 0 0 2 0 0
5 5 1 0 0 0 1
我建议采用tidyverse
这样的方法重塑数据:
library(tidyverse)
#Data
com <- paste(c("1", "1", "1", "1", "2", "2", "3","3","3", "4", "4", "5", "5"))
species <- paste(c("sp1", "sp1", "sp2", "sp4", "sp3", "sp1", "sp5", "sp2","sp2", "sp3","sp3", "sp5", "sp1" ))
data <- as.data.frame(cbind(com, species))
#Reshape
data %>% pivot_longer(cols = -com) %>%
group_by(com,value) %>% summarise(N=n()) %>%
pivot_wider(names_from = value, values_from=N) %>%
replace(is.na(.),0)
输出:
# A tibble: 5 x 6
# Groups: com [5]
com sp1 sp2 sp4 sp3 sp5
<fct> <int> <int> <int> <int> <int>
1 1 2 1 1 0 0
2 2 1 0 0 1 0
3 3 0 2 0 0 1
4 4 0 0 0 2 0
5 5 1 0 0 0 1
# A tibble: 5 x 6
# Groups: com [5]
com sp1 sp2 sp3 sp4 sp5
<fct> <int> <int> <int> <int> <int>
1 1 2 1 0 1 0
2 2 1 0 1 0 0
3 3 0 2 0 0 1
4 4 0 0 2 0 0
5 5 1 0 0 0 1
#一个tible:5 x 6
#组别:com[5]
com sp1 sp2 sp3 sp4 sp5
1 1 2 1 0 1 0
2 2 1 0 1 0 0
3 3 0 2 0 0 1
4 4 0 0 2 0 0
5 5 1 0 0 0 1
as.data.frame(cbind(com,species))
是一种反模式data.frame(com,species)
更好cbind
将所有内容转换为相同的数据类型,其中直接使用data.frame
可以将列保留为不同的类型。请尝试table(data)
data.frame(com,species)
更好cbind
将所有内容转换为相同的数据类型,其中使用data.frame
可以直接将列保留为不同的类型。请尝试table(data)