首页 > 解决方案 > 压缩和连接数据框

问题描述

我有一个数据框,我正试图与另一个数据框合并,我遇到了一些问题,我认为这些问题可以追溯到每个观察结果都是事件而不是累积量的事实。我有下面的数据框,其中每一行都是一个单独的观察值,然后我将使用weekcode将其与基于相同变量的另一个数据框weekcode.

数据框a将每一行作为一个特定的观察值,但我需要它按代码/日期成为累积观察值/行。我完全被难住了。

  date       count       code  week
  <date>     <dbl>      <dbl> <dbl>
1 2020-06-07     4      13309    23
2 2020-06-07     5      13309    23
3 2020-07-12     6      18099    28
4 2020-07-12     8      18099    28

需要成为

  date       count       code  week
  <date>     <dbl>      <dbl> <dbl>
1 2020-06-07     9      13309    23
2 2020-07-12    14      18099    28

然后,它将能够与数据框合并 b

  date       color     name       code  week
  <date>     <char>   <char>      <dbl> <dbl>
1 2020-06-07 Blue         A      13309    23
1 2020-06-07 Yellow       B      13309    23
1 2020-06-07 Purple       D      13309    23
3 2020-07-12 Yellow       A      18099    28
3 2020-07-12 Blue         E      18099    28

最终结果将是

  date       color     name     code   week    count
  <date>     <char>   <char>   <dbl>  <dbl>    <dbl>
1 2020-06-07 Blue         A    13309     23        9
1 2020-06-07 Yellow       B    13309     23        9
1 2020-06-07 Purple       D    13309     23        9
3 2020-07-12 Yellow       A    18099     28       14
3 2020-07-12 Blue         E    18099     28       14

我最初使用下面的代码来执行此操作,但它完全炸毁了我的数据框。我的尺寸从dim(a) == (209807, 86)dim(merged) == (1367029, 89)。我尝试了多种类型的连接(右、左、内等),但所有这些仍然破坏了数据框(由大约 100 个观察值变化,但仍然导致超过一百万行)。这就是为什么我认为这个问题是由于a在特定日期对特定代码的每个观察与总结观察。

merged <- right_join(x = b,
                     y = a, 
                     by = c("code" = "code",
                       "week" = "week"))

标签: rdplyr

解决方案


a %>%
  group_by(date, code, week) %>%
  summarize(count = sum(count)) %>%
  ungroup() %>%
  left_join(b, ., by = c("date", "code", "week"))
#         date  color name  code week count
# 1 2020-06-07   Blue    A 13309   23     9
# 2 2020-06-07 Yellow    B 13309   23     9
# 3 2020-06-07 Purple    D 13309   23     9
# 4 2020-07-12 Yellow    A 18099   28    14
# 5 2020-07-12   Blue    E 18099   28    14

推荐阅读