Расчет количества строк в сумме до нуля: проблемы с импортом данных?

У меня есть фрейм данных 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).


person ayesha    schedule 12.11.2018    source источник
comment
Вам нужно sum(rowSums(bwsp$N) == 0)   -  person G5W    schedule 12.11.2018
comment
Сначала запустите rowSums(bwsp[-1]) и посмотрите, совпадают ли результаты. Кроме того, вы не используете library(tidyverse) в примере вопроса. Возможно, вы используете его в своем коде, но количество примеров вопросов должно быть минимальным.   -  person Rui Barradas    schedule 12.11.2018


Ответы (2)


Заменять

bwsp$N <- rowSums(bwsp)

с участием

bwsp$N <- rowSums(bwsp[-1])

чтобы исключить первый столбец, поскольку rowSum () требует числовых данных.

person Dames    schedule 12.11.2018

Как только я урезал вопрос, я смог вернуться к исходному сценарию и увидеть свою ошибку. В другой своей работе я сначала рассчитал несколько индексов разнообразия, используя:

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])

Фух! Это было хорошим напоминанием о том, что нужно серьезно подумать о своих данных!

person ayesha    schedule 15.11.2018