gpt4 book ai didi

r - 对具有差异的 IF 多个标准求和 - R

转载 作者:行者123 更新时间:2023-12-03 18:11:04 26 4
gpt4 key购买 nike

所以,我之前问过这个问题,但对于 Excel 中的数组公式。然而,我的数据集太大了,电子表格几乎没有响应,所以我希望能够在 R 中运行它以提高效率。

Link之前回答的问题

不过,我会在这里重申和扩展它。

Day     Type    Val
1 A 5
1 B 6
1 C 9
1 D 7
2 B 2
2 A 8
2 C 3
2 D 3
3 C 4
3 B 2
3 A 2
4 A 5
4 B 9
4 C 8
5 A 7
5 B 5
6 A 6
6 B 3
6 C 4
7 A 7
7 B 9

我在上面提供了一个简化的数据框(我的有成千上万的行和数百个“类型”)。我希望能够分配一个“类型”,然后
  • 计算当天不存在分配的“类型”的剩余“类型”的平均“值”
  • 计算当天确实存在分配的“类型”的剩余“类型”的平均“值”

  • 例如,如果我分配“类型”C,则 C 在第 5 天和第 7 天不存在。

    输出将是:
    Type     Average_Without    Average_With
    A 7.0 5.2
    B 7.0 4.4
    C NA 5.2
    D NA 5.0

    最佳答案

    使用 data.table你也可以试试

    library(data.table)
    # Get the days where Type == "C" - You probably don't need unique at all
    indx <- unique(setDT(df)[Type == "C", Day])

    # Calculate average by including/excluding these days by Type
    df[,
    .(Without = mean(Val[!Day %in% indx]),
    With = mean(Val[Day %in% indx])),
    by = Type]
    # Type Without With
    # 1: A 7 5.2
    # 2: B 7 4.4
    # 3: C NaN 5.6
    # 4: D NaN 5.0

    我们可能可以通过减少计算来进一步增强它,但更难阅读代码
    indx <- unique(setDT(df)[Type == "C", Day]) 
    df[, {
    indx2 <- Day %in% indx ## Calculate this only once and reuse it
    .(
    Without = mean(Val[!indx2]),
    With = mean(Val[indx2])
    )
    },
    by = Type]
    # Type Without With
    # 1: A 7 5.2
    # 2: B 7 4.4
    # 3: C NaN 5.6
    # 4: D NaN 5.0

    关于r - 对具有差异的 IF 多个标准求和 - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36426249/

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