根据代码列表折叠组
Collapse groups according to a list of codes
我有一个 table 逗号分隔的代码,应该折叠起来
group_codes <-
tibble::tribble(
~group_codes,
"AAA11, AAA1Z",
"ZZZ21, ZZZ2Z"
)
还有一个 table,其上的折叠和求和应该是 运行:
tibble::tribble(
~codes, ~values,
"AAA11", 10,
"AAA1Z", 20,
"CCC3", 34,
"ZZZ21", 10,
"ZZZ2Z", 30
)
第三行将保持不变,它不在要折叠的代码列表中。
预期结果是列表中代码的折叠并对它们的值求和。
tibble::tribble(
~codes, ~values,
"AAA11,AAA1Z", 30L,
"CCC3", 34L,
"ZZZ21, ZZZ2Z", 40L
)
我期待 运行 分组后崩溃。代码不会重复。在大多数情况下,它们可能会彼此跟随,但顺序未知(数据来自手动输入表格。最好的 tidyverse 方法是什么?
我们可以拆分 group_codes 中的列,进行连接和汇总
library(dplyr)
library(tidyr)
group_codes %>%
mutate(codes = group_codes) %>%
separate_rows(codes) %>%
left_join(df1, ., by = "codes") %>%
transmute(codes = coalesce(group_codes, codes), values) %>%
group_by(codes) %>%
summarise(values = sum(values, na.rm = TRUE), .groups = 'drop')
-输出
# A tibble: 3 × 2
codes values
<chr> <dbl>
1 AAA11, AAA1Z 30
2 CCC3 34
3 ZZZ21, ZZZ2Z 40
我有一个 table 逗号分隔的代码,应该折叠起来
group_codes <-
tibble::tribble(
~group_codes,
"AAA11, AAA1Z",
"ZZZ21, ZZZ2Z"
)
还有一个 table,其上的折叠和求和应该是 运行:
tibble::tribble(
~codes, ~values,
"AAA11", 10,
"AAA1Z", 20,
"CCC3", 34,
"ZZZ21", 10,
"ZZZ2Z", 30
)
第三行将保持不变,它不在要折叠的代码列表中。
预期结果是列表中代码的折叠并对它们的值求和。
tibble::tribble(
~codes, ~values,
"AAA11,AAA1Z", 30L,
"CCC3", 34L,
"ZZZ21, ZZZ2Z", 40L
)
我期待 运行 分组后崩溃。代码不会重复。在大多数情况下,它们可能会彼此跟随,但顺序未知(数据来自手动输入表格。最好的 tidyverse 方法是什么?
我们可以拆分 group_codes 中的列,进行连接和汇总
library(dplyr)
library(tidyr)
group_codes %>%
mutate(codes = group_codes) %>%
separate_rows(codes) %>%
left_join(df1, ., by = "codes") %>%
transmute(codes = coalesce(group_codes, codes), values) %>%
group_by(codes) %>%
summarise(values = sum(values, na.rm = TRUE), .groups = 'drop')
-输出
# A tibble: 3 × 2
codes values
<chr> <dbl>
1 AAA11, AAA1Z 30
2 CCC3 34
3 ZZZ21, ZZZ2Z 40