【问题标题】:dplyr - condtional statement in summarisedplyr - 总结中的条件语句
【发布时间】:2021-03-18 19:56:08
【问题描述】:

我想根据 group_by 序列号做一个有条件的 dply 总结

serial  type    qty price   type1   type2
1   B   54  3694    N   M
1   B   96  3694    N   M
1   S   150 3694    Y   P
2   B   25  3694    N   M
2   B   21  3694    N   A
2   B   50  3694    N   P
2   B   104 3694    N   M
2   S   200 3694    Y   P
3   S   1   3695    N   M
3   B   75  3695    Y   P
3   S   74  3695    N   M
4   S   1   3694    N   A
4   B   36  3694    N   M
4   B   4   3694    N   A
4   S   36  3694    N   P
4   S   20  3694    N   M
4   B   181 3694    N   M
4   S   164 3694    N   P
5   B   1   3695    Y   A
5   S   1   3695    N   M
6   S   1   3695    N   M
6   B   1   3695    Y   A

这个我想转换成下表

serial  header1 SUM1    header2 SUM2    B   S   GROUP_B GROUP_S
1   BN  150 SY  150 N   Y   MM  P
2   BN  200 SY  200 N   Y   MAPM    P
3   BY  75  SN  75  Y   N   P   MM
4   BN  221 SN  221 N   N   MAM APMP
5   BY  1   SN  1   Y   N   A   M
6   BY  1   SN  1   Y   N   A   M

无法处理汇总中的条件

【问题讨论】:

  • 如果您能描述一下从输入到输出的逻辑,将会很有帮助。

标签: r tidyr dplyr


【解决方案1】:

以下管道执行此转换。

library(tidyr)
library(dplyr)

tab %>% 
    unite("header0", type, type1, sep = "", remove = FALSE) %>% 
    group_by(serial) %>% 
    mutate(
        isB = type == "B",
        isS = type == "S") %>% 
    summarise(
        header1 = header0[isB][1L],
        SUM1 = sum(qty[isB]), 
        header2 = header0[isS][1L],
        SUM2 = sum(qty[isS]), 
        B = type1[isB][1L], 
        S = type1[isS][1L],
        GROUP_B = paste(type2[isB], collapse = ""), 
        GROUP_S = paste(type2[isS], collapse = ""), 
        .groups = "drop")

【讨论】:

    猜你喜欢
    • 2023-02-15
    • 2017-09-14
    • 2021-06-30
    • 1970-01-01
    • 2021-12-08
    • 2019-07-16
    • 2017-06-10
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多