我有一个数据框bwsp
,其中包含两个位置的许多物种的丰度数据,看起来像这样:
Location sp1 sp2 sp3 sp4
sample1 SiteA 0 12 0 0
sample2 SiteA 0 3 0 0
sample3 SiteA 1 0 0 0
sample4 SiteB 0 0 6 0
sample5 SiteB 2 1 1 0
sample6 SiteB 0 1 0 80
sample7 SiteB 2 1 1 0
sample8 SiteB 0 0 0 0
我使用以下公式计算每个样品中所有物种的总丰度:
bwsp$N <- rowSums(bwsp)
我现在要计算在每个位置有多少个样本(=行)的丰度为零(即N = 0)。我开始:
library(tidyverse)
sum(bwsp$N == "0")
,发现没有行总计为零。但是我知道这是错误的! (我处理了这些样本,并且我知道其中有一些是“空”的。)因此我用以下方法进行了检查:
> summary(bwsp$N)
我非常惊讶地看到最小N为1.0。我仔细检查了Excel中的其他摘要统计信息,但两者都不完全匹配。
这些仅仅是舍入错误吗?我究竟做错了什么?
NB:我只是用上面提供的虚拟数据进行了检查,它工作得很好。这使我认为将数据放入R中的方式(bwsp <- read.csv("dummybwsp.csv", row.names = 1)
)做错了。
答案 0 :(得分:1)
替换
bwsp$N <- rowSums(bwsp)
使用
bwsp$N <- rowSums(bwsp[-1])
要排除第一列,因为rowSum()需要数字数据。
答案 1 :(得分:0)
一旦我解决了这个问题,便能够回头看原始脚本并看到我的错误。在其他工作中,我首先使用以下方法计算了多样性指数:
bwsp$shann <- diversity(bwsp)
bwsp$simp <- diversity(bwsp, "simpson")
当然,这些加一,因此每行数据加一。我编写的原始脚本没有问题,但是我没有仔细考虑我处理数据的方式存在问题。
我能够通过指定计算中使用的数据列来解决此问题:
bwsp$shann <- diversity(bwsp[,1:64])
bwsp$simp <- diversity(bwsp[,1:64], "simpson")
bwsp$N <- rowSums(bwsp[,1:64])
Ph!这确实提醒了我认真考虑我的数据!