在R中连接两列(1个因子,1个整数)

时间:2011-05-12 01:35:28

标签: r dataframe apply

以下是我数据的前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()函数是用于将SpeciesCount加在一起的正确函数,但我无法弄清楚代码。

我相信代码应该是:

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

所以我对如何组合这两列有了很好的反馈,但是,我仍然无法比较横断面和位置之间的数据。我不确定如何继续。我想要做的是创建一个代码:

Count ~ Transect
# or 
Count ~ Location

这样做的问题是计数数据只是一堆数字,它是一个物种的参考。有没有人有任何建议?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您可以使用角色方式:

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

或因素方式:

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

由于这是在线性建模的背景下,因子方式似乎更合适。

答案 1 :(得分:0)

如果我理解你的问题,那么d为你的data.frame:

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

答案 2 :(得分:0)

我认为您对建模功能的输入应该是什么感到困惑。如果你在计算计数,那么就需要这样的东西:

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

如果您想查看物种与位置的相互作用,那么您可以检查此模型:

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

可以进行线性回归,但是你可能会得到负面计数等无意义的预测。