r - 通过 3 个条件计算一个变量的 % 突然给出错误消息
问题描述
好的,我的 R 代码中有一个奇怪的问题。我有一个数据集(实际上它更大):
Stomachdata_2017 = data.frame(Species= c('Herring','Herring','Cod','Cod','Cod','Cod','Shark', 'Shark', 'Shark'),
FishID= c('1', '1', '2', '2', '3','3','4', '5','5'),
StomachSp= c('Shrimp','Shrimp','Crab', 'Scad', 'Scad', 'Scad','Fish', 'Whiting', 'Fish'))
我想计算每个独特 FishID 每个独特物种的 StomachSp 百分比。我之前做过这个计算(见下文):
#Sum for each unique species, FishID and unique stomach content the amount of prey items
Stomach_perc <- count(unique(Stomachdata_2017), vars = c("Species", "FishID", "StomachSp"))
Stomach_perc$Occ <- rep(1,nrow(Stomach_perc))
Stomach_perc<-with(Stomach_perc,aggregate(Occ,by=list(Species=Species,StomachSp=StomachSp),function(x) sum(x)))
Stomach_perc$Perc <- with(Stomach_perc, ave(x, Species, FUN=prop.table))
Stomach_perc$Perc <- Stomach_perc$Perc * 100
但是..当我今天再次运行代码时,它突然给出了一个错误(?!)我以前从未遇到过..我没有更改代码或任何东西。在这个例子中它似乎可以工作,但是当我将此代码应用于我的大型数据集时,它突然停止工作......
Error: Column `vars` must be length 49 (the group size) or one, not 3
谁能帮我?这非常令人沮丧……
谢谢
解决方案
为了详细说明我的评论,问题在于命名空间。
假设您昨天加载了plyr
库,然后继续编写以下代码:
Stomach_perc <- count(unique(Stomachdata_2017), vars = c("Species", "FishID", "StomachSp"))
在这种情况下,count
指的是包count()
导出的函数plyr
。在昨天和今天之间的某个时间点,您可能还加载了一些其他包,通常怀疑包括tidyr
or之类的dplyr
。其中一些包也有导出功能count()
。
今天,当您执行完全相同的代码时:
Stomach_perc <- count(unique(Stomachdata_2017), vars = c("Species", "FishID", "StomachSp"))
这一次,count()
可能是从另一个包中导出的函数。
当然,具体问题不在于count()
:它可能发生在任何具有足够通用名称的函数上。所以使用dplyr::count()
明确地使用该包中的计数功能。
顺便说一句,在交互式编写代码时,这是一个非常常见的场景,比如以 R Markdown / R Notebook 格式。您可能会在第 43 行阅读某个库,然后返回并运行第 20 行的代码,然后您会发现,曾经有效的代码不再有效。命名空间!
Hadley Wickham关于这个主题的材料非常值得一读!
希望这可以澄清。
推荐阅读
- python - “spacy.tokens.doc.Doc”对象没有属性“pos_”
- python - pandas to_sql() 给出了一个 SADeprecationWarning
- laravel - Laravel 社交名流。如何将回电的 sessionId 与拨打电话的人相匹配?
- php - 多个 X-Frame-Option 拒绝在框架内显示
- r - 无法从该站点抓取数据(使用 R)
- javascript - 如何修复 prv 箭头此幻灯片放映
- sql - 根据 Azure SQL Server 中的名称查找多个列
- windows - 如何在 Windows 的 linux 子系统上安装 numpy?
- firebase - Flutter:如何创建重复推送通知?
- java - 比较简短的参考?