gpt4 book ai didi

r - 使用 ddply 汇总 R 中的总和和均值

转载 作者:行者123 更新时间:2023-12-04 09:35:22 25 4
gpt4 key购买 nike

我的数据框有两列用作分组键,每组需要对 17 列求和,还有一列应该取平均值。让我在另一个数据框 diamonds 上对此进行说明。来自 ggplot2 .

我知道我可以这样做:

ddply(diamonds, ~cut, summarise, x=sum(x), y=sum(y), z=sum(z), price=mean(price))

但是,虽然 3 列是合理的,但其中 17 列是 Not Acceptable 。

在研究这个时,我发现了 colwise功能,但我想出的最好的是:
cbind(ddply(diamonds, ~cut, colwise(sum, 7:9)), price=ddply(diamonds, ~cut, summarise, mean(price))[,2])

是否有可能进一步改善这一点?我想以更直接的方式来做,比如(想象的命令):
ddply(diamonds, ~cut, colwise(sum, 7:9), price=mean(price))

或者:
ddply(diamonds, ~cut, colwise(sum, 7:9), colwise(mean, ~price))

总结一下:
  • 我不想像第一个例子那样明确地输入所有 17 列,x , y , 和 z .
  • 理想情况下,我想通过一次调用 ddply 来完成。 ,而不诉诸 cbind (或类似功能),如第二个示例所示。

  • 作为引用,我期望的结果是 5 行和 5 列:
            cut         x         y        z    price
    1 Fair 10057.50 9954.07 6412.26 4358.758
    2 Good 28645.08 28703.75 17855.42 3928.864
    3 Very Good 69359.09 69713.45 43009.52 3981.760
    4 Premium 82385.88 81985.82 50297.49 4584.258
    5 Ideal 118691.07 118963.24 73304.61 3457.542

    最佳答案

    我想建议data.table解决方案。您可以轻松地按位置或按名称预定义要操作的列,然后无论您要操作多少列,都可以重用相同的代码。

    预定义列名

    Sums <- 7:9
    Means <- "price"

    运行代码
    library(data.table)
    data.table(diamonds)[, c(lapply(.SD[, Sums, with = FALSE], sum),
    lapply(.SD[, Means, with = FALSE], mean))
    , by = cut]

    # cut x y z price
    # 1: Ideal 118691.07 118963.24 73304.61 3457.542
    # 2: Premium 82385.88 81985.82 50297.49 4584.258
    # 3: Good 28645.08 28703.75 17855.42 3928.864
    # 4: Very Good 69359.09 69713.45 43009.52 3981.760
    # 5: Fair 10057.50 9954.07 6412.26 4358.758

    对于您的具体示例,这可以简化为
    data.table(diamonds)[, c(lapply(.SD[, 7:9, with = FALSE], sum), pe = mean(price)), by = cut]
    # cut x y z pe
    # 1: Ideal 118691.07 118963.24 73304.61 3457.542
    # 2: Premium 82385.88 81985.82 50297.49 4584.258
    # 3: Good 28645.08 28703.75 17855.42 3928.864
    # 4: Very Good 69359.09 69713.45 43009.52 3981.760
    # 5: Fair 10057.50 9954.07 6412.26 4358.758

    关于r - 使用 ddply 汇总 R 中的总和和均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702470/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com