首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用ddply时检索全局索引?

如何在使用ddply时检索全局索引?
EN

Stack Overflow用户
提问于 2011-07-09 19:36:29
回答 2查看 644关注 0票数 1

我试图从plyr包的钻石数据集中找到价格/克拉的最佳交易

所以我知道

代码语言:javascript
复制
    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))

但当我这么做的时候

代码语言:javascript
复制
    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

因此,指数似乎是从由蹒跚学步制作的子组中获得的。这里只有第一个索引,即4,对应于全局索引。如果我查一查new2,它就不是公平的类型,比如D,VS1。

知道如何轻松检索全局索引位置吗?

例如,如何优雅地添加id列?有没有更好的解决办法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-09 19:59:19

如果您试图为ecartcolorclarity的每一个独特组合确定最小值的钻石,那么您可能打算这样做:

代码语言:javascript
复制
new <- ddply(diamonds, c("cut", "color", "clarity"), transform, 
         ecart= price/carat -  mean(price/carat))   
best <- ddply(new, c("cut", "color", "clarity"), 
         .fun = function(x){x[which.min(x$ecart),]})

这不需要在传递给.fun的每一段.fun之外处理索引。

编辑

哈德利在评论中指出

代码语言:javascript
复制
ddply(new, c("cut","color","clarity"), subset, ecart == min(ecart))

更优雅。它还将正确地拉出符合条件的所有行,在领带最小的情况下。

票数 4
EN

Stack Overflow用户

发布于 2011-07-09 20:05:14

我想我很清楚你想要什么。您可以直接使用which.min函数对由ddply返回的data.frames进行索引。您只需要使用匿名函数就可以这样做:

代码语言:javascript
复制
ddply(new, c("cut", "color", "clarity"), function(x) x[which.min(x$ecart) ,])

至于第二个问题,您可以生成如下ID列:

代码语言:javascript
复制
diamonds$id <- seq_len(nrow(diamonds))

但我不知道这和问题有什么关系?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6637040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档