【问题标题】:ddply aggregated column namesddply 聚合列名
【发布时间】:2011-07-29 02:13:30
【问题描述】:

我正在使用 ddply 来聚合我的数据,但还没有找到一种优雅的方式来为输出数据框分配列名。

目前我正在这样做:

agg_data <- ddply(raw_data, .(id, date, classification), nrow)
names(agg_data)[4] <- "no_entries"

还有这个

agg_data <- ddply(agg_data, .(classification, date), colwise(mean, .(no_entries)) )
names(agg_data)[3] <- "avg_no_entries"

有没有更好、更优雅的方法来做到这一点?

【问题讨论】:

  • 你可能还想看看count

标签: r plyr


【解决方案1】:

我经常使用的通用形式是:

 ddply(raw_data, .(id, date, classification), function(x) data.frame( no_entries=nrow(x) )

我几乎一直在我的ddply 语句中使用匿名函数,因此上述成语与匿名函数非常吻合。这不是表达像nrow() 这样的函数的最简洁方式,但是对于我传递多个参数的函数,我非常喜欢它。

【讨论】:

    【解决方案2】:

    你可以使用summarise:

    agg_data <- ddply(raw_data, .(id, date, classification), summarise, "no_entries" = nrow(piece))
    

    如果nrow(piece) 不起作用,您可以使用length(&lt;column_name&gt;)。例如,这是一个任何人都可以运行的示例:

    ddply(baseball, .(year), summarise, newColumn = nrow(piece))
    

    ddply(baseball, .(year), summarise, newColumn = length(year))
    

    编辑

    或者作为 Joshua cmets,全大写版本,NROW 为您进行检查。

    【讨论】:

    • NROW 为您进行必要的检查。
    • 效果很好;我不知道piece 变量。当我已经使用 colwise 函数时,你知道它是如何工作的吗?我在上面的问题中添加了第二个示例。
    • @behas - 不确定你的意思;你的第二个例子可以用..., summarise, mean(no_entries)) 完成。或者你问的是piece 变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多