Объединение двух столбцов (1 множитель, 1 целое число) в R

#r #dataframe #apply

#r #фрейм данных #применить

Вопрос:

Ниже приведены первые 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 вместе, но я не могу разобраться в коде.

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

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

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

 Count ~ Transect
# or 
Count ~ Location
  

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

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

Комментарии:

1. Не могли бы вы немного пояснить, что вы подразумеваете под «объединением»?

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

Ответ №1:

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

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

или факторный способ:

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

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

Ответ №2:

Если я правильно понимаю ваш вопрос, для d — это ваш data.frame:

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

Комментарии:

1. Спасибо, что сработало для размещения всего в одном столбце.

Ответ №3:

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

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

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

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

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