Расхождение строк и столбцов для таблиц Excel в R - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь выполнить некоторые анализы функционального разнообразия для пчел в Северном Онтарио.Я использую пакет R SYNCSA и пытаюсь рассчитать разнообразие Рао.Появляется ошибка, в которой говорится, что «Существуют виды из данных сообщества, которые не включены в матрицу признаков».

Чтобы выполнить анализ с помощью функции rao.diversity, мне нужно было составить таблицу данных по численности(например, 2 сообщества пчел и сколько в нем каждого вида) и таблица признаков (например, каждый вид в сообществе и их специфичность пыльцы, поведение гнездования и т. д., который содержит порядковые данные, которые я оценил численно).

Теперь существует правило, использующее эту функцию, когда названия видов, которые находятся в столбцах в данных сообщества (численности), должны точно соответствовать названиям видов строк в данных признаков.Когда я получил эту ошибку, я сразу же убедился, что столбцы данных сообщества соответствуют строкам данных признаков, и они, насколько я вижу, соответствуют.Я также попробовал функцию organiz.syncsa, которая должна исправить несоответствие столбца / строки, только чтобы получить сообщение об ошибке «comm должен содержать только числовые или двоичные переменные».Мой comm (то есть данные сообщества) действительно содержит только числовые переменные, поэтому я тоже не знаю, что я делаю неправильно.

Ниже приведены текстовые представления ASCII моих 2 таблиц для данных сообщества иданные о свойствах соответственно:

dput(community.data.raos)
structure(list(X = structure(2:1, .Label = c("Akimiski", "Far North"
), class = "factor"), Andrena.algida = 1:0, Andrena.barbilabris = 1:0, 
    Andrena.frigida = 1:0, Anthophora.terminalis = 0:1, Bombus.flavidus = c(6L, 
    0L), Bombus.flavifrons = 2:1, Bombus.frigidus = c(65L, 27L
    ), Bombus.melanopygus = c(0L, 8L), Bombus.mixtus = 1:2, Bombus.sandersoni = c(21L, 
    0L), Bombus.sylvicola = c(4L, 17L), Bombus.ternarius = c(5L, 
    15L), Bombus.terricola = c(8L, 0L), Bombus.vagans = c(9L, 
    0L), Colletes.americanus = 0:1, Colletes.impunctatus = c(0L, 
    6L), Colletes.nigrifrons = c(1L, 5L), Halictus.ligatus = c(0L, 
    2L), Halictus.rubicundus = c(2L, 0L), Halictus.tripartitus = 1:0, 
    Halictus.virgatellus = c(2L, 12L), Lasioglossum.ephialtum = c(2L, 
    0L), Lasioglossum.laevissimum = 1:0, Lasioglossum.inconditum = c(5L, 
    0L), Lasioglossum.quebecense = 1:0, Coelioxys.sodalis = 2:1, 
    Hoplitis.albifrons = 1:0, Megachile.circumcincta = 0:1, Megachile.frigida = 2:3, 
    Megachile.gemula = 1:2, Megachile.lapponica = c(1L, 1L), 
    Megachile.melanophaea = c(0L, 3L), Megachile.montivaga = 1:0, 
    Megachile.perihirta = c(0L, 3L), Megachile.relativa = 1:2, 
    Osmia.bucephala = c(1L, 1L), Osmia.laticeps = 1:0, Osmia.nigrifrons = c(2L, 
    0L), Osmia.nigriventris = c(5L, 1L), Osmia.paradisica = c(0L, 
    8L), Osmia.tarsata = 1:0, Osmia.tersula = 1:0), class = "data.frame", row.names = c(NA, 
-2L))


dput(trait.table.raos)
structure(list(X = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 
24L, 26L, 25L, 27L, 15L, 23L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 
35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L), .Label = c("Andrena.algida ", 
"Andrena.barbilabris ", "Andrena.frigida ", "Anthophora.terminalis", 
"Bombus.flavidus", "Bombus.flavifrons ", "Bombus.frigidus ", 
"Bombus.melanopygus ", "Bombus.mixtus", "Bombus.sandersoni ", 
"Bombus.sylvicola", "Bombus.ternarius ", "Bombus.terricola ", 
"Bombus.vagans ", "Coelioxys.sodalis ", "Colletes.americanus", 
"Colletes.impunctatus", "Colletes.nigrifrons", "Halictus.ligatus", 
"Halictus.rubicundus", "Halictus.tripartitus", "Halictus.virgatellus ", 
"Hoplitis.albifrons ", "Lasioglossum.ephialtum", "Lasioglossum.inconditum", 
"Lasioglossum.laevissimum ", "Lasioglossum.quebecense ", "Megachile.circumcincta ", 
"Megachile.frigida", "Megachile.gemula", "Megachile.lapponica", 
"Megachile.melanophaea", "Megachile.montivaga ", "Megachile.perihirta", 
"Megachile.relativa", "Osmia.bucephala", "Osmia.laticeps", "Osmia.nigrifrons", 
"Osmia.nigriventris", "Osmia.paradisica ", "Osmia.tarsata", "Osmia.tersula "
), class = "factor"), Pollen.Specificity = c(2L, 2L, 1L, 2L, 
0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 
1L, 2L, 2L, 2L, 1L, 2L), Tongue.Length = c(0L, 0L, 0L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), Sociality = c(1L, 1L, 1L, 1L, 0L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 3L, 2L, 2L, 3L, 3L, 2L, 
1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), Nesting.Behavior = c(0L, 0L, 0L, 2L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 2L, 1L, 
0L, 1L, 1L), Average.Female.ITD = c(NA, NA, NA, NA, 3.64, NA, 
3.02, NA, 4.52, 3.21, 3.67, 4.17, 4.14, 3.59, NA, 2.15, 1.97, 
NA, 2.21, NA, 1.79, NA, NA, 1.43, NA, NA, NA, NA, 3.14, 3.57, 
3.21, 3.24, NA, 3.92, NA, 4, NA, 3.29, 3.86, 3.09, NA, NA)), class = "data.frame", row.names = c(NA, 
-42L))

И пример получаемой ошибки:

rao.diversity(comm = community.data.raos, traits = trait.table.raos)
Error in rao.diversity(comm = community.data.raos, traits = trait.table.raos) : 

 There are species from community data that are not on traits matrix
> 

Функция rao.diversity должна создавать серию небольших таблиц со значением от 0 до1 для каждого сайта (в моем случае, есть два таких сайта), указывающих различные меры разнообразия.Вместо этого я получаю сообщение об ошибке «Существуют виды из данных сообщества, которые не включены в матрицу признаков».

1 Ответ

0 голосов
/ 19 апреля 2019

Документация не делает это супер ясным, но, глядя на код функции , мы видим, что имена столбцов объекта сообщества должны соответствовать именам строк объекта черт.С помощью этой информации мы можем просмотреть ваши входные данные и выявить несколько проблем:

  • У вашего объекта сообщества есть первый столбец X, который не является видом.Избавьтесь от этого, превратив значения в имена строк, если вы хотите сохранить эту информацию.

  • Ваш объект признаков имеет виды в первом столбце, но они должны быть именами строк.

  • Метки вашего вида несовместимы между двумя объектами: в таблице признаков у некоторых из них есть пробел.Используйте trimws(), чтобы избавиться от этого, чтобы совпадения были точными.

Если у вас продолжают возникать проблемы, вы можете посмотреть на setdiff(row.names(trait.table.raos), colnames(community.data.rao)) и наоборот, setdiff(colnames(community.data.rao), row.names(trait.table.raos)), чтобы убедиться, что совпадение названий видов является точным.Оба этих утверждения не должны давать результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...