簡體   English   中英

根據代碼列表折疊組

[英]Collapse groups according to a list of codes

我有一個應該折疊的逗號分隔代碼表

group_codes <-  
 tibble::tribble(
    ~group_codes,
  "AAA11, AAA1Z",
  "ZZZ21, ZZZ2Z"
  )

以及應該在其上運行折疊和求和的表:

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
  )

我期待在 group-by 之后運行崩潰。 代碼不會重復。 在大多數情況下,它們可能會彼此跟隨,但順序未知(數據來自手動輸入表格。最好的 tidyverse 方法是什么?

我們可以拆分 group_codes 中的列,做一個 join 和 summarize

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM