我正在尝试在R中编写一个函数,它将数据类中的物种列聚合在一起。 (为了详细阐述我在做什么......我有一个数据框,有多个植物物种,适合多个地点和多年,有些物种被错误识别,所以我想分组到更多一般水平(例如,spp a和spp b在这些年中混在一起;所以我想创建一个名为spp.ab的新列,其中spp a和b的数据集中在一起))。使用函数在R data.frame中添加一列
例子:
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是我想要的新列名。
感谢您的帮助,
保罗
那么'new.spp'是新列的名称? –
正确,您可以通过将名称放在引号中作为函数的参数来调用它。例如,如果你想称它为el.conquistador,你可以输入lump(db,c('spp.a','spp.b'),'el.conquistador') – logicForPresident