Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将我的列数据转换为社区矩阵_R_Matrix_Formatting - Fatal编程技术网

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)