我试图从 plyr 包中的Diamonds数据集中找到价格/克拉的最佳交易
所以我做到了
new = ddply(diamonds, c("cut", "color", "clarity"), transform, ecart= price/carat - mean(price/carat))
best = ddply(new, c("cut", "color", "clarity"), summarize, which(ecart == min(ecart))
但是,当我这样做时,我得到了
head(best)
cut color clarity ..1
1 Fair D I1 4
2 Fair D SI2 49
3 Fair D SI1 39
4 Fair D VS2 9
5 Fair D VS1 2
所以索引似乎是由ddply创建的子组 . 这里只有第一个索引4对应于全局索引 . 如果我查找新的[2,]它不是例如Fair,D,VS1类型 .
关于如何轻松检索全局指数位置的任何想法?
例如,如何优雅地添加id列?有更好的解决方案吗?
2 回答
我想我理解你想要的东西 . 您可以直接使用
which.min
函数索引ddply返回的data.frames . 您只需要使用匿名函数来执行此操作:至于你的第二个问题,你可以像这样生成一个ID列:
虽然我不确定这与问题的关系如何?
如果您正在尝试为
cut
,color
和clarity
的每个唯一组合识别具有最低值ecart
的钻石,那么您可能想要执行以下操作:这不需要弄乱每个
diamonds
之外的索引传递给.fun
.EDIT
哈德利在评论中指出
更优雅 . 它还将正确地拉出符合条件的所有行,以便最小化 .