Соединение двух столбцов (1 фактор, 1 целое число) в R - PullRequest
0 голосов
/ 12 мая 2011

Ниже приведены первые 5 строк моих данных: фрейм данных называется инвертированными

    Location Transect  Species         Count
    McAbee     M1       Bat Star         35
    McAbee     M1       Turban Snail     2
    McAbee     M1       Sun Star         1
    McAbee     M1       Chiton           1
    ..........

Я пытаюсь объединить свои виды и подсчитать данные вместе, чтобы я мог выполнить ANOVA, чтобы увидеть различия междурасположение и разрез.У меня есть две локации и всего четыре трансекты.

Я считаю, что функция tapply() является правильной для объединения Species и Count, но я не могу понять код.

Я считаю, что код долженbe:

inverts$speciescount = tapply(inverts$Species, inverts$Count, ....)

Итак, я получил несколько хороших отзывов о том, как объединить эти два столбца, однако я все еще не могу сравнить данные между разрезами и местоположением.Я не уверен, как поступить.То, что я хочу сделать, - это создать код, в котором он будет:

Count ~ Transect
# or 
Count ~ Location

Проблема, связанная с простыми действиями, заключается в том, что данные Count - это просто набор чисел, и они относятся к виду.У кого-нибудь есть предложения?

Спасибо за помощь

Ответы [ 3 ]

1 голос
/ 12 мая 2011

Вы можете сделать это либо символьным способом:

within(inverts, speciesCount <- paste(Species, Count, sep=":")

, либо факторным путем:

within(inverts, speciesCount <- Species:factor(Count))

Поскольку это в контексте линейного моделирования, факторный путь кажется болеенеобходимо.

0 голосов
/ 12 мая 2011

Я думаю, вы не понимаете, каким должен быть ваш вклад в функцию моделирования. Если вы моделируете счетчики, то понадобится что-то вроде этого:

cfit <- glm(counts ~  transect + location + species, data=inverts, family="poisson")
anova(cfit)

Если вы хотите посмотреть на взаимодействие видов с локацией, то вы можете изучить эту модель:

cfit2 <- glm(counts ~  transect + location + species, data=inverts, family="poisson")
anova(cfit2)

Можно было бы выполнить линейную регрессию, но тогда вы можете получить бессмысленные прогнозы, такие как отрицательные значения.

0 голосов
/ 12 мая 2011

Если я правильно понимаю ваш вопрос, потому что вы - data.frame:

newd <- data.frame(d[,c("Location","Transect")],SpeciesCount=paste(d$Species,d$Count))
...