【发布时间】:2013-12-21 09:26:59
【问题描述】:
我正在尝试在 R 中编写一个函数,它将物种列集中在一个 data.frame 中。
(详细说明我在做什么......我有一个数据框,其中包含多个地点和年份的多种植物物种。有些物种被错误识别,所以我想分组到更一般的级别(例如 spp a 和 spp b 多年来一直混在一起;所以我想创建一个名为 spp.ab 的新列,其中 spp a 和 b 的数据集中在一起)。
例子:
spp.a spp.b
1 0
2 3
0 4
3 2
4 5
我希望最终以单列显示两个物种的最大值:
spp.ab
1
3
4
3
5
我已经开始写一个函数来做这件事;但是,我在将新列添加到我的数据集中并删除旧列时遇到了麻烦。有人能告诉我我的代码有什么问题吗?
lump <- function(db, spp.list, new.spp) { #input spp.list as c('spp.a', 'spp.b', ...)
mini.db <- subset(db, select=spp.list);
newcol <- as.vector(apply(mini.db, 1, max, na.rm=T));
db$new.spp <- newcol
db <- db[,names(db) %in% spp.list]
return(db)
}
当我这样调用函数时
test <- lump(db, c('spp.a', 'spp.b'), spp.ab)
test
所有弹出的都是 mini.db。我是否缺少 return() 的内容?
作为参考,db 是数据库,spp.list 是我要汇总的物种,new.spp 是我想要的新列命名。
感谢您的帮助,
保罗
【问题讨论】:
标签: r