物种积累曲线缺失线

时间:2019-12-06 18:23:12

标签: r

我在下面找到了一个代码,将其调整为适合我的基本数据,并且可以正常工作!

链接到Ants.csv here

library(readxl)
library(vegan)

data<- read_excel("C:/Users/Juan/Desktop/Raw_data/Code_source/Ants.xlsx")

ants<-data[2:16]

Curve = specaccum(ants, method = "random",permutations = 999)

plot(Curve,ci=0,ci.type=c("line"),col="red",ylab="Number of Species",main="Calitzdorp")
axis(1, at=1:10)

但是,当我使用任何其他数据时,绘图窗口会打开带有x和y轴但没有线的工作表? 谁能告诉我为什么我现在突然错过了电话?以下是我的代码的副本,除了缺少该行外,其他代码均有效:

链接到Ant_data_R here

library(readxl)
library(vegan)

data<-read_excel("C:/Users/Juan/Desktop/Raw_data/Code_source/Ant_data_R.xlsx",sheet = "CA")

ants<-data[2:16]

Curve = specaccum(ants, method = "random",permutations = 999)

plot(Curve,ci=0,ci.type=c("line"),col="red",ylab="Number of Species",main="Calitzdorp",ylim=c(0,20))

axis(1, at=1:20)

当我查看数据框时,一切看起来都很好,所以我不认为这是由于Excel表不同所致。

1 个答案:

答案 0 :(得分:1)

您的代码中遇到几个问题。基本上,您的错误是尝试直接对任何数据框应用代码,而不检查该数据框与示例中使用的结构是否相同。

让我解释一下,在这里,您将看到我使用以下代码导入的head的两个数据的csv的输出:

data <- read.table("../Ants.csv", sep = ";", header = T)
data2 <- read.table("../Ant_data_R.csv", sep = ";", header = T)

对于Ants

> head(data[1:6])
          No Sp.1 Sp.2 Sp.3 Sp.4 Sp.5
1 Transect 1    0    0    0    0    0
2 Transect 2    0    0    0    0    0
3 Transect 3    0    4    0    0    2
4 Transect 4    0    0    0    0    0
5 Transect 5    0    1    0    0    1
6 Transect 6    0    1    0    0    0

对于Ant_data_R

> head(data2[1:6])
  Site Habitat No Sp.1 Sp.2 Sp.3
1   CA       H  1   NA   NA   NA
2   CA       H  2   NA   NA   NA
3   CA       H  3   NA   NA   NA
4   CA       H  4   NA   NA   NA
5   CA       H  5   NA   NA   NA
6   CA       H  6   NA   NA   NA

如您所见,1)第二个文件的第一列中有更多描述性列。 2)在第二个文件中,缺失值用NA代替0填充。

因此,在您的代码中您不能使用示例所提供的直ants <- data[2:16],因为您将获得不同的输出:

这里是第一个数据帧:

ants <- data[2:16]

> head(ants[1:6])
  Sp.1 Sp.2 Sp.3 Sp.4 Sp.5 Sp.6
1    0    0    0    0    0   15
2    0    0    0    0    0    3
3    0    4    0    0    2   13
4    0    0    0    0    0   15
5    0    1    0    0    1    6
6    0    1    0    0    0    9

这里是第二个:

ants2 <- data2[2:16]

> head(ants2[1:6])
  Habitat No Sp.1 Sp.2 Sp.3 Sp.4
1       H  1   NA   NA   NA   NA
2       H  2   NA   NA   NA   NA
3       H  3   NA   NA   NA   NA
4       H  4   NA   NA   NA   NA
5       H  5   NA   NA   NA   NA
6       H  6   NA   NA   NA   NA

如您所见,输出非常不同。在第一个数据帧中,它将选择与specaccum函数兼容的数值,但在第二种情况下,您将拥有字符值和NA。

因此,解决方案是仅过滤和选择感兴趣的列。我们可以使用dplyr(存在其他方式)做到这一点:

library(vegan)
library(tidyverse)
ants2 <- data2 %>% filter(., Site == "CA") %>% select(., contains("Sp.")) %>% replace(is.na(.),0)

现在ants2的输出如下:

> head(ants2[1:6])
  Sp.1 Sp.2 Sp.3 Sp.4 Sp.5 Sp.6
1    0    0    0    0    0    0
2    0    0    0    0    0    0
3    0    0    0    0    0    0
4    0    0    0    0    0    0
5    0    0    0    0    0    0
6    0    0    0    0    0    0

如果您应用specaccum函数并绘制它们,则会得到:

Curve = specaccum(ants, method = "random",permutations = 999)
Curve2 = specaccum(ants2, method = "random",permutations = 999)

plot(Curve,ci=0,ci.type=c("line"),col="red",ylab="Number of Species",main="Calitzdorp", ylim = c(2,15))
axis(1, at=1:10)
lines(Curve2,ci=0,ci.type=c("line"),col="blue")
legend("topleft", legend = c("Ants", "Ants_data_R"), col = c("red","blue"), bty = F, lty = 1)

enter image description here

希望它可以帮助您找出处理第二个数据帧时的错误。 让我知道您是否在寻找它。