计算多少行总和为零:导入数据有问题?

时间:2018-11-12 00:31:59

标签: r import summary

我有一个数据框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))做错了。

2 个答案:

答案 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!这确实提醒了我认真考虑我的数据!